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

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

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

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

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

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

Кинга Идем в IT: пошаговый план для смены профессии

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

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

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

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

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

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

Чтобы найти все возможные варианты написания ('EXCLUDE_THIS', 'Exclude_This', '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 — Руководство по выборке данных с помощью булевой индексации.