#python-3.x #pandas
#python-3.x #pandas
Вопрос:
Ниже приведен мой df.
import pandas as pd
df = pd.DataFrame ({
'IP':['10.140.34.210;0.0.0.0','0.0.0.0;0.0.0.0;10.0.1.87;0.0.0.0;0.0.0.0','0.0.0.0;172.31.48.174',
'10.140.67.244;0.0.0.0', '1.1.1.1','3.3.3.3'],
})
print(df)
IP
0 10.140.34.210;0.0.0.0
1 0.0.0.0;0.0.0.0;10.0.1.87;0.0.0.0;0.0.0.0
2 0.0.0.0;172.31.48.174
3 10.140.67.244;0.0.0.0
4 1.1.1.1
5 3.3.3.3
Чего я хотел бы добиться, так это сохранить в столбце IP только правильный IP-адрес без каких-либо 0.0.0.0. Это ожидаемый результат.
IP
0 10.140.34.210
1 10.0.1.87
2 172.31.48.174
3 10.140.67.244
4 1.1.1.1
5 3.3.3.3
Я пробовал с помощью split, но он не выполняет свою работу.
df = df['IP'].str.split(';',expand=True)
print(df)
0 1 2 3 4
0 10.140.34.210 0.0.0.0 None None None
1 0.0.0.0 0.0.0.0 10.0.1.87 0.0.0.0 0.0.0.0
2 0.0.0.0 172.31.48.174 None None None
3 10.140.67.244 0.0.0.0 None None None
4 1.1.1.1 None None None None
5 3.3.3.3 None None None None
Есть идеи? Спасибо!
Ответ №1:
Если это единственный исключительный случай, от которого вам нужно избавиться, используйте replace
с регулярным выражением:
print(df["IP"].replace(";?0.0.0.0;?","", regex=True))
0 10.140.34.210
1 10.0.1.87
2 172.31.48.174
3 10.140.67.244
4 1.1.1.1
5 3.3.3.3
Name: IP, dtype: object
Ответ №2:
Попробуйте
df[~df.IP.str.contains("0.0.0.0")]
IP
4 1.1.1.1
5 3.3.3.3