Фильтрация DataFrame в pandas: метод 'не содержит'
Быстрый ответ
Для исключения строк из DataFrame, которые в определенной колонке ('column'
) не содержат значение 'exclude_this', задействуйте следующий код:
result = df[~df['column'].str.contains('exclude_this', na=False)]
Оператор ~
указывает на противоположное условие "не содержит". Параметр na=False
гарантирует, что строки со значением NaN также окажутся в результате.
Детальный разбор стратегий фильтрации
Сразу несколько попаданий: Работаем с множественными шаблонами
Если нужно исключить несколько элементов, примените регулярные выражения с оператором |
(логическое ИЛИ):
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
:
result = df[~df['column'].str.contains('exclude_this', case=False, na=False)] # Регистр уже не играет роли.
Совершенство техники: Lambda для сложных условий
В случае, когда требуется сложная логика фильтрации, например исключение нескольких значений, вам пригодятся лямбда-функции:
result = df[df['column'].apply(lambda x: all(word not in x for word in ['word1', 'word2']))] # Максимально точная фильтрация.
Обработка NULL и TypeError
Проверьте, что в DataFrame нет 'null' или значений разного типа, которые могут вызывать TypeError, перед тем как применять отрицательную фильтрацию:
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
будет идеальным решением для работы с комплексными условиями:
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 | ✨Не существует✨ |
Вы хотите убрать обезьян, то есть исключить строки со значением 'Джунгли' в столбце 'Среда обитания':
result = df[~df['Habitat'].str.contains("Jungle", na=False)] # Теперь змей в зоопарке нет.
В итоге DataFrame 'Zoo' выглядит так:
Животное | Количество | Среда обитания |
---|---|---|
Лев | 5 | Саванна |
Слон | 2 | Степь |
В списке уже нет джунглей. 🌳❌
Полезные материалы
- pandas.DataFrame.query — документация pandas 2.2.0 — Узнайте, как формировать запросы к DataFrame.
- 6. Выражения — Документация Python 3.12.2 — Ознакомьтесь с правильным использованием оператора
not
в Python. - pandas.DataFrame.isin — документация pandas 2.2.0 — Метод DataFrame.isin для выборки данных.
- re — Операции с регулярными выражениями — Документация Python 3.12.2 — Регулярные выражения в Python.
- pandas.Series.str.contains — документация pandas 2.2.0 — Применение шаблонов для обнаружения соответствий в строках pandas.
- Поиск строки, которой "не содержит" в DataFrame в pandas – Stack Overflow — Обсуждения и реальные примеры использования на Stack Overflow.
- Индексация и выбор данных — документация pandas 2.2.0 — Руководство по выборке данных с помощью булевой индексации.