Как выборочно удалить строки по частичному текстовому соответствию из ячейки pandas

Рейтинг: 0Ответов: 3Опубликовано: 07.06.2023

Есть большой xslx файл (краткий пример привёл ниже). Вопрос: как мне удалить в файле все строки, где хотя бы в одной ячейке которых, есть слово "Итог"? Нужно именно удалить, а не отфильтровать, без оставления пустой строки)) никак не могу понять как нужно написать условие(( Файлы огромные (около 7Мб), поэтому не хочу постоянно пользоваться топором в виде текстового редактора excel.

введите сюда описание изображения

Ответы

▲ 2Принят

Учитывая инфу из вашего предыдущего вопроса по этой теме, что 'Итог' может быть в любом столбце:

cols = ['Город', 'Заказы'] # с помощью df.columns получаем все столбцы и вставляем их в список

def has_itog(array):
    return 'Итог' in array

for i in cols:
    df[i] = df[i].apply(lambda x: x.split())
    df = df[~df[i].apply(has_itog)].copy()
    df[i] = df[i].apply(lambda x: ' '.join(x))
    
df.reset_index(drop=True, inplace=True)

Единственное-столбцы с числами (если там тоже встречается Итог (если не встречается, то не указываем эти столбцы в список cols)) должны содержать строки(str), а не int/float, после выполнения отброса строк с Итогом, можно вернуть нужным столбцам тип дынных int/float.

▲ 2

Что-то типа такого:

df = df[~df['A'].str.contains('Итог')]
▲ -1
import pandas as pd

# Загрузка файла Excel в DataFrame
df = pd.read_excel('example.xlsx')

# Перебор строк и удаление строк, в которых есть слово "Итог"
for index, row in df.iterrows():
    if 'Итог' in row.values:
        df.drop(index, inplace=True)

# Сохранение обновленного DataFrame обратно в файл Excel
df.to_excel('example_filtered.xlsx', index=False)