Здравствуйте.
Есть датафрейм такого содержания:
num ip price
1 192.168.0.1 120
2 127.0.0.1 140
3 10.10.10.10 130
4 45.45.45.45 150
5 8.8.8.8 110
6 8.8.4.4 90
7 212.48.135.220 120
Нужно преобразовать IP в CIDR с маской /24.
Пробовал через "replace" и регулярку. Результат - IP заменяются регуляркой в той форме, как она была написана.
import pandas as pd
from pandasgui import show
df=pd.read_csv('test.csv', index_col=False)
df = df.astype({'ip':object})
df.replace({'ip': r'([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)[0-9]{1,3}'}, {'ip': r'([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24'}, regex=True)
Также пробовал другие формы записи:
df['ip'].replace(to_replace='', value='', regex=True)
или
df['ip'].replace(to_replace=r'', value=r'', regex=True)
или
df['ip'].replace(to_replace=r'', value=r'')
Вывод после регулярки:
num ip price
1 ([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24 120
2 ([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24 140
3 ([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24 130
4 ([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24 150
5 ([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24 110
6 ([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24 90
7 ([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)0/24 120
Пока решил проблему проходом по csv файлу утилитой sed c этой же регуляркой, но хотелось бы делать все в Pandas. Плиз, посоветуйте, как решить проблему.