Как работать с SQL-подобным синтаксисом в Python
Иногда при анализе данных на Python хочется писать запросы в привычном SQL-синтаксисе — фильтровать, группировать и соединять таблицы так, как это делается в СУБД. К счастью, делать это можно и без отдельного сервера баз данных — прямо в памяти, используя специальные библиотеки.
1. pandasql: SQL поверх DataFrame
Одна из самых простых библиотек — pandasql. Она позволяет выполнять SQL-запросы к объектам pandas.DataFrame с помощью функции sqldf.
import pandas as pd
import pandasql as ps
df = pd.DataFrame({
"city": ["Moscow", "Kazan", "Omsk", "Moscow"],
"population": [12.6, 1.2, 1.1, 12.6]
})
query = """
SELECT city, COUNT(*) as count
FROM df
GROUP BY city
"""
result = ps.sqldf(query, locals())
print(result)
Здесь запрос обрабатывается встроенным SQLite-интерпретатором, а df воспринимается как таблица. Для простых задач анализа данных это отличный вариант.
2. DuckDB: аналитические запросы без внешней СУБД
Если хочется больше возможностей — стоит обратить внимание на DuckDB. Это встроенная аналитическая база данных, оптимизированная для колонночного хранения и обработки больших объёмов данных.
import duckdb
import pandas as pd
df = pd.read_csv("data.csv")
result = duckdb.query("""
SELECT category, AVG(price) AS avg_price
FROM df
WHERE price > 1000
GROUP BY category
ORDER BY avg_price DESC
""").to_df()
DuckDB прекрасно работает с DataFrame, Parquet и CSV-файлами, не требуя отдельной установки сервера. Его часто называют “SQLite для аналитики”.
3. polars + lazy: выражения в духе SQL, но на Rust-скорости
Библиотека polars предлагает декларативный стиль, похожий на SQL, но с нативной производительностью (написана на Rust).
SQL-запросы можно выполнять через scan_csv() или df.sql():
import polars as pl
df = pl.DataFrame({
"city": ["Moscow", "Kazan", "Omsk"],
"population": [12.6, 1.2, 1.1]
})
result = df.sql("SELECT city, population * 1000 AS pop_thousands FROM self")
print(result)
При этом polars позволяет использовать lazy evaluation — запросы строятся как план, а вычисляются только при необходимости, что ускоряет обработку больших данных.
Когда использовать SQL в Python
- Когда вы привыкли к SQL и хотите быстро фильтровать и агрегировать данные без изучения API pandas.
- При прототипировании аналитических запросов до переноса в СУБД.
- Для обработки данных в ноутбуках или при анализе CSV/Parquet-файлов локально.
SQL-подобный синтаксис делает Python ещё удобнее для аналитиков и исследователей данных. Вы можете совмещать лаконичность SQL с мощью Python — и не тратить время на ручную трансформацию таблиц.