Работа с пробелами в названиях колонок Pandas query
Быстрый ответ
Для работы с именами столбцов, содержащими пробелы, в pandas
используйте обратные кавычки:
df.query('`Имя столбца` == "значение"')
Таким образом, вы указываете pandas
, что Имя столбца
является цельной конструкцией, что обеспечивает непрерывную работу запросов.
Эта особенность доступна начиная с версии Pandas 0.25 и выше. Если у вас более ранняя версия, воспользуйтесь методами, описанными ниже.
Разбираемся с деталями
Метод query()
в pandas и использование обратных кавычек для столбцов с пробелами значительно упрощают рабочий процесс. Однако в некоторых случаях могут возникнуть трудности, требующие специального подхода.
Альтернативные способы выборки данных для предыдущих версий
Если у вас версия Pandas до 0.25, обратные кавычки в функции query()
не поддерживаются. В этом случае вы можете использовать:
Применение булевых масок:
PythonСкопировать кодdf[df['Имя столбца'] == значение] # отработанный временем подход
Выборка данных с помощью
.loc
:PythonСкопировать кодdf.loc[df['Имя столбца'] == значение] # надёжный метод навигации по данным
Оба этих метода проверены временем, но они могут уступать в лаконичности методу query()
.
Проблемы с нетипичными именами столбцов
Некоторые имена столбцов могут не соответствовать стандартам наименования идентификаторов в Python: например, начинаются с цифр или содержат специальные символы. В таких ситуациях даже обратные кавычки не решат проблему с query()
. В таком случае рассматривайте вариант переименования столбцов или останьтесь на описанных выше методах.
Знания сообщества и официальная документация
В сообществе pandas на GitHub регулярно рассматриваются такого рода проблемы, в частности, это актуально в вопросе #6508. Кроме того, незаменимым источником информации является официальная документация Pandas, где можно получить актуальные рекомендации.
Визуализация
Работа с именами столбцов, содержащими пробелы, в Pandas напоминает поиск книг с раздельными названиями в библиотеке.
Каталог библиотеки:
- 'Анализ данных' 📗
- 'Машинное обучение' 📘
- 'Глубокое обучение' 📙
Стандартный запрос:
👤: Хочу взять книгу АнализДанных.
📚: Возможно, вы имеете в виду 'Анализ данных'? 📗
Запрос в Pandas через `.query()`:
👤: Мне нужен 'Анализ данных'.
📚: Ошибка! 🚨
Чтобы всё проходило гладко:
df.query('`Анализ данных` > 100') # словно волшебный ключ
Представьте, что вы общаетесь с библиотекарем:
👤: Я ищу книгу под названием 'Анализ данных'. Обратите внимание на кавычки!
📚: Пожалуйста, вот она – 'Анализ данных' 📗. Я понял вас с первого раза! ✅
Дополнительные советы и трюки
Единое наименование столбцов
Старайтесь пользоваться однообразными наименованиями столбцов и по возможности избегайте пробелов. Это позволит предотвратить множество проблем при формировании запросов и выполнении других операций с данными.
Множественные условия в запросах
При использовании запросов с несколькими условиями, в которых фигурируют сложные названия столбцов с пробелами, обрабатывайте каждое условие отдельно:
df.query('`Первый столбец` > 10 и `Второй столбец` < 20') # словно заказываете комбо-обед
Ограничения сложных выражений
Несмотря на то что метод query()
является мощным инструментом, он имеет ряд ограничений. Сложные выражения, особенно те, которые требуют невекторизованных операций, могут потребовать использования стандартных методов.
Полезные материалы
- pandas.DataFrame.query — документация pandas 2.2.0
- python – Как добавить проценты на столбцы при группировке
- Гид по стилю SQL от Simon Holywell
- Высокопроизводительный Pandas: функции eval() и query() | Пособие по Data Science на Python
- MySQL :: Руководство по MySQL 8.0 :: 11.2 Именование объектов схем
- Синтаксические соглашения Transact-SQL (Transact-SQL) – Microsoft Learn