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

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

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

Ответы

▲ 2

Я не совсем считываю весь контекст вашего вопроса, поэтому я опишу для вас общий примерный процесс того, как удаляются строки из xlsx файла посредством pandas.

Представим у нас есть следующая таблица kek.xlsx:

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

Мы хотим, допустим, удалить из неё строки в котором поле age больше 30 и пересохранить её, например, в kek2.xlsx. Для этого мы можем использовать следующий код:

import pandas as pd

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

# Условие для удаления строк
condition = df['age'] > 30

# Удаление строк, удовлетворяющих условию
df = df[~condition]

# Сохранение измененного DataFrame в файл Excel
df.to_excel('01.06.23\kek2.xlsx', index=False)

В результате программы будет создан файл kek2.xlsx, вот как он будет выглядеть:

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


UPD

Для того чтобы проверять по строке, можно присвоить переменной condition следующее значение:

condition = df['ваша ячейка'].str.contains('Итог')
▲ 1

Если я правильно понял вопрос, то это должно сработать:

df['Столбец'] = df['Столбец'].apply(lambda x: x if type(x) != str else None)

Это должно удалить все значения ячеек, в которых тип данных — строка.

▲ 1

Надеюсь я правильно понял вопрос в этот раз, вот код, который будет проверять наличие слова "Итог" в столбце "Город" и отфильтровывать датафрейм так, что там будут оставаться только те строки, где нет слова "Итог":

df['Город'] = df['Город'].apply(lambda x: x.split())

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

df = df[~df['Город'].apply(has_itog)].copy()
df['Город'] = df['Город'].apply(lambda x: ' '.join(x))
df = df.reset_index()

На выходе будет датафрейм со строками без слова "Итог"