Удаление столбцов с определенной строкой в Pandas DataFrame
Быстрый ответ
Если необходимо исключить столбцы, где в названиях присутствует конкретная подстрока, вам поможет следующий код:
df = df.drop([col for col in df.columns if 'substring' in col], axis=1)
Такой синтаксически компактный пример команды позволит удалить из DataFrame
все столбцы, в названиях которых упоминается 'substring'.
Различные способы удаления столбцов
Рассмотрим различные подходы, помогающие решить эту задачу в соответствии с контекстом.
Игнорирование регистра
В случае, если регистр подстроки при поиске не имеет значения, применяйте метод lower()
:
df = df.drop([col for col in df.columns if 'substring'.lower() in col.lower()], axis=1)
Использование регулярных выражений
Для более гибкого поиска можно использовать str.contains
с регулярными выражениями:
df = df[df.columns[~df.columns.str.contains('substring', regex=True)]]
Применение функции filter
Существует возможность избежать использования списочных выражений, применив функцию filter
напрямую:
df = df.drop(df.filter(like='substring').columns, axis=1)
Методы startswith и endswith
Для удаления столбцов, которые начинаются или заканчиваются определенной последовательностью символов, используйте startswith
и endswith
:
df = df.drop([col for col in df.columns if col.startswith('substring')], axis=1)
df = df.drop([col for col in df.columns if col.endswith('substring')], axis=1)
Не забывайте указывать axis=1
при работе со столбцами.
Как избежать распространенных ошибок
Опыт работы с DataFrame говорит о ряде типичных ошибок, избежание которых положительно сказывается на качестве кода.
Обход предупреждения SettingWithCopyWarning
Для предотвращения появления предупреждения SettingWithCopyWarning
, используйте copy()
:
df_clean = df.drop([col for col in df.columns if 'substring' in col], axis=1).copy()
Задействование сложных условий выбора
В сложных задачах и при работе с большим обьемом данных условия могут объединяться:
df = df.drop(df.columns[(df.columns.str.contains('substring')) | (df.columns.str.contains('another'))], axis=1)
Сохранение исходного DataFrame
Для сохранения исходного DataFrame без изменений, присваивайте результат операции новой переменной:
df_filtered = df.drop([col for col in df.columns if 'substring' in col], axis=1)
Визуализация
Восприятие проблемы упрощается, если есть возможность взглянуть на неё.
Продумайте DataFrame
как о саде с клумбами – столбцами, каждая из которых имеет своё "имя".
Сад DataFrame: [🌷 Маргаритка, 🌻 Подсолнух, 🥀 Роза_содержит_стр, 🌼 Тюльпан]
Удаление столбцов можно сравнить с избавлением от сорняков:
df = df.drop([col for col in df.columns if 'содержит_стр' in col], axis=1)
Теперь сад вашего DataFrame выглядит ухоженным и аккуратным:
Очищенный сад: [🌷 Маргаритка, 🌻 Подсолнух, 🌼 Тюльпан]
Оптимизация работы с данными
Работа с pandas
предполагает не только использование мощных инструментов, но и стремление к элегантности в коде.
Мощь инструментов pandas
Воспользуйтесь всем арсеналом полезных методов для строк, таких как str.contains
, str.startswith
, str.endswith
, чтобы сделать вашу работу с данными максимально эффективной.
Упрощение программирования на Python
Python предлагает удивительные возможности использования списочных выражений и лямбда-функций. Они помогают реализовывать сложные операции в pandas поистине легко.
Полезные материалы
- pandas.DataFrame.drop — документация pandas 2.2.0
- python – Как отбирать строки из DataFrame основываясь на значениях столбцов? – Stack Overflow
- pandas.Series.str.contains — документация pandas 2.2.0
- Применение лямбда-функций в Python – Real Python
- Подробное руководство по Python
- SettingwithCopyWarning: как корректно обойти это предупреждение в Pandas – Dataquest
- Использование функций apply и lambda в pandas. Освойте, чтобы достичь мастерства в Pandas | автор Рахул Агарвал