Работа с пробелами в названиях колонок Pandas query

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

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

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

Для работы с именами столбцов, содержащими пробелы, в pandas используйте обратные кавычки:

Python
Скопировать код
df.query('`Имя столбца` == "значение"')

Таким образом, вы указываете pandas, что Имя столбца является цельной конструкцией, что обеспечивает непрерывную работу запросов.

Эта особенность доступна начиная с версии Pandas 0.25 и выше. Если у вас более ранняя версия, воспользуйтесь методами, описанными ниже.

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

Разбираемся с деталями

Метод query() в pandas и использование обратных кавычек для столбцов с пробелами значительно упрощают рабочий процесс. Однако в некоторых случаях могут возникнуть трудности, требующие специального подхода.

Альтернативные способы выборки данных для предыдущих версий

Если у вас версия Pandas до 0.25, обратные кавычки в функции query() не поддерживаются. В этом случае вы можете использовать:

  • Применение булевых масок:

    Python
    Скопировать код
      df[df['Имя столбца'] == значение]  # отработанный временем подход
  • Выборка данных с помощью .loc:

    Python
    Скопировать код
      df.loc[df['Имя столбца'] == значение]  # надёжный метод навигации по данным

Оба этих метода проверены временем, но они могут уступать в лаконичности методу query().

Проблемы с нетипичными именами столбцов

Некоторые имена столбцов могут не соответствовать стандартам наименования идентификаторов в Python: например, начинаются с цифр или содержат специальные символы. В таких ситуациях даже обратные кавычки не решат проблему с query(). В таком случае рассматривайте вариант переименования столбцов или останьтесь на описанных выше методах.

Знания сообщества и официальная документация

В сообществе pandas на GitHub регулярно рассматриваются такого рода проблемы, в частности, это актуально в вопросе #6508. Кроме того, незаменимым источником информации является официальная документация Pandas, где можно получить актуальные рекомендации.

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

Работа с именами столбцов, содержащими пробелы, в Pandas напоминает поиск книг с раздельными названиями в библиотеке.

Markdown
Скопировать код
Каталог библиотеки:
- 'Анализ данных' 📗 
- 'Машинное обучение' 📘 
- 'Глубокое обучение' 📙

Стандартный запрос:
👤: Хочу взять книгу АнализДанных.
📚: Возможно, вы имеете в виду 'Анализ данных'? 📗

Запрос в Pandas через `.query()`:
👤: Мне нужен 'Анализ данных'.
📚: Ошибка! 🚨

Чтобы всё проходило гладко:

Python
Скопировать код
df.query('`Анализ данных` > 100')  # словно волшебный ключ

Представьте, что вы общаетесь с библиотекарем:

Markdown
Скопировать код
👤: Я ищу книгу под названием 'Анализ данных'. Обратите внимание на кавычки!
📚: Пожалуйста, вот она – 'Анализ данных' 📗. Я понял вас с первого раза! ✅

Дополнительные советы и трюки

Единое наименование столбцов

Старайтесь пользоваться однообразными наименованиями столбцов и по возможности избегайте пробелов. Это позволит предотвратить множество проблем при формировании запросов и выполнении других операций с данными.

Множественные условия в запросах

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

Python
Скопировать код
df.query('`Первый столбец` > 10 и `Второй столбец` < 20')  # словно заказываете комбо-обед

Ограничения сложных выражений

Несмотря на то что метод query() является мощным инструментом, он имеет ряд ограничений. Сложные выражения, особенно те, которые требуют невекторизованных операций, могут потребовать использования стандартных методов.

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

  1. pandas.DataFrame.query — документация pandas 2.2.0
  2. python – Как добавить проценты на столбцы при группировке
  3. Гид по стилю SQL от Simon Holywell
  4. Высокопроизводительный Pandas: функции eval() и query() | Пособие по Data Science на Python
  5. MySQL :: Руководство по MySQL 8.0 :: 11.2 Именование объектов схем
  6. Синтаксические соглашения Transact-SQL (Transact-SQL) – Microsoft Learn