Получение определенного значения из ячейки

#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