Фильтрация DataFrame в pandas: метод 'не содержит'

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Быстрый ответ

Для исключения строк из DataFrame, которые в определенной колонке ('column') не содержат значение 'exclude_this', задействуйте следующий код:

Python
Скопировать код
result = df[~df['column'].str.contains('exclude_this', na=False)]

Оператор ~ указывает на противоположное условие "не содержит". Параметр na=False гарантирует, что строки со значением NaN также окажутся в результате.

Пошаговый план для смены профессии

Детальный разбор стратегий фильтрации

Сразу несколько попаданий: Работаем с множественными шаблонами

Если нужно исключить несколько элементов, примените регулярные выражения с оператором | (логическое ИЛИ):

Python
Скопировать код
patterns = 'exclude_this|also_this|and_this_too'
result = df[~df['column'].str.contains(patterns, na=False)]  # В результате все нежелательные строки будут исключены.

Убедитесь, что в переменной patterns все необходимые шаблоны указаны, причём они должны быть разделены |.

Без криков: Игнорируем регистр

Чтобы найти все возможные варианты написания ('EXCLUDETHIS', 'ExcludeThis', 'exclude_this'), добавьте параметр case=False:

Python
Скопировать код
result = df[~df['column'].str.contains('exclude_this', case=False, na=False)]  # Регистр уже не играет роли.

Совершенство техники: Lambda для сложных условий

В случае, когда требуется сложная логика фильтрации, например исключение нескольких значений, вам пригодятся лямбда-функции:

Python
Скопировать код
result = df[df['column'].apply(lambda x: all(word not in x for word in ['word1', 'word2']))]  # Максимально точная фильтрация.

Обработка NULL и TypeError

Проверьте, что в DataFrame нет 'null' или значений разного типа, которые могут вызывать TypeError, перед тем как применять отрицательную фильтрацию:

Python
Скопировать код
df['column'] = df['column'].fillna('default_value')  # Теперь NaN заменены на 'default_value'.
df['column'] = df['column'].astype(str)  # Приводим все значения к строкам для единообразия.
result = df[~df['column'].str.contains('exclude_this')]  # И теперь всё готово для фильтрации.

Тонкости работы со сложными условиями: применяем метод loc

Метод loc будет идеальным решением для работы с комплексными условиями:

Python
Скопировать код
result = df.loc[~df['column'].str.contains('exclude_this', na=False) & (df['another_column'] > 50)]  # Двойное условие: значение 'exclude_this' отсутствует в 'column' и значение в 'another_column' больше 50.

Визуализация

Представим, вы куратор зоопарка и вот так выглядит ваш DataFrame ('Zoo'):

Животное Количество Среда обитания
Лев 5 Саванна
Слон 2 Степь
Змея 12 Джунгли
Обезьяна 8 ✨Не существует✨

Вы хотите убрать обезьян, то есть исключить строки со значением 'Джунгли' в столбце 'Среда обитания':

Python
Скопировать код
result = df[~df['Habitat'].str.contains("Jungle", na=False)]  # Теперь змей в зоопарке нет.

В итоге DataFrame 'Zoo' выглядит так:

Животное Количество Среда обитания
Лев 5 Саванна
Слон 2 Степь

В списке уже нет джунглей. 🌳❌

Полезные материалы

  1. pandas.DataFrame.query — документация pandas 2.2.0 — Узнайте, как формировать запросы к DataFrame.
  2. 6. Выражения — Документация Python 3.12.2 — Ознакомьтесь с правильным использованием оператора not в Python.
  3. pandas.DataFrame.isin — документация pandas 2.2.0 — Метод DataFrame.isin для выборки данных.
  4. re — Операции с регулярными выражениями — Документация Python 3.12.2 — Регулярные выражения в Python.
  5. pandas.Series.str.contains — документация pandas 2.2.0 — Применение шаблонов для обнаружения соответствий в строках pandas.
  6. Поиск строки, которой "не содержит" в DataFrame в pandas – Stack Overflow — Обсуждения и реальные примеры использования на Stack Overflow.
  7. Индексация и выбор данных — документация pandas 2.2.0 — Руководство по выборке данных с помощью булевой индексации.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод в pandas используется для исключения строк, которые не содержат определённое значение в колонке?
1 / 5

Загрузка...