Удаление строк в DataFrame на основе регулярных выражений
Я совсем недавно начал заниматься с Python и Pandas и столкнулся с проблемой. У меня есть файл на 60к строк, в нем содержатся смс, которые отправляла наша компания в течении месяца.
import pandas as pd
# Это небольшой список регулярок на основе которых я провожу поиск.
regex_list = [r'Код подтверждения:', r'ВНИМАНИЕ! НЕОЖИДАННОЕ КОЛИЧЕСТВО СОБЫТИЙ!.*', r'Для получения подотчета в кассе .* в размере .\d+ руб\D сообщите код кассиру: \d{1,6}', r'Активность .*: Факт.значение: .*. Нужное значение: .*']
# Новые названия колонок.
new_name = ['message', 'operator', 'sms_amount', 'price', 'traffic']
df = pd.read_csv('November.csv', sep=";", decimal=',')
# Дропаем не нужные нам колонки.
df.drop(['Дата отправки', 'Группа отправителя', 'ФИО отправителя',
'Номер отправителя', 'ФИО получателя', 'Номер получателя',
'Дата доставки', 'Канал отправки', 'Теги', 'ТД', 'Тип',
'Статус доставки'],
axis='columns', inplace=True)
# Ренейм.
df.set_axis(new_name, axis='columns', inplace=True)
# Пропуски в колонке Цена меняем на 0
df['price'] = df['price'].fillna(0)
#Добавляем столбец с общей стоимостью.
df.loc[0, 'total_sum'] = (df['price'] * df['sms_amount']).sum()
А дальше, мне нужно удалить из исходного файла (либо из его копии), те строки, для которых было найдено вхождение.
Для поиска я использовал
df[df['message'].str.contains(r'{}'.format(row))]
в цикле и он прекрасно ищет, но как удалить найденные строки из исходного файла я не представляю.
Ответы (1 шт):
Автор решения: Alpensin
→ Ссылка
Добавить логическое не ~ и по поиску каждой регулярки оставлять те, кто не подходит под паттерн.
df = df[~df['message'].str.contains(r'{}'.format(row))]
А можно обойтись без цикла for и сделать регулярку с ИЛИ под каждый случай
df = df[~df['message'].str.contains('|'.join(regex_list))]