Здравствуйте.
Есть датафрейм такого содержания:
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. Плиз, посоветуйте, как решить проблему.