Если вы знаете только SQL и задумываетесь, а нужно ли учить Pandas, то я могу вам предложить, отличную альтернативу, которая позволяет работать с Pandas DataFrames на языке SQL. Для этого нам понадобиться библиотека duckdb.
1️⃣ Устанавливаем библиотеки (если нужно):
pip install pandas duckdb
2️⃣ Создаём тестовые DataFrames в Python:
import pandas as pd
import duckdb
# DataFrame 1: Заказы (orders_df)
orders_data = {
'order_id': [1, 2, 3, 4],
'customer': ['Alice', 'Bob', 'Charlie', 'David'],
'amount': [100, 200, 150, 300]
}
orders_df = pd.DataFrame(orders_data)
# DataFrame 2: Доставки (deliveries_df)
deliveries_data = {
'order_id': [1, 2, 4],
'status': ['Delivered', 'Delivered', 'Pending'],
'delivery_date': ['2025-08-10', '2025-08-12', None]
}
deliveries_df = pd.DataFrame(deliveries_data)
Теперь эти DataFrames хранятся в переменных orders_df и deliveries_df. Они имеют общее поле order_id — идеально для join'а!
3️⃣ Магия DuckDB: SQL-запросы прямо на DataFrames!
DuckDB видит ваши DataFrames как "таблицы":
# Простой пример: SELECT из одного DataFrame
base_df = duckdb.query("""
SELECT * FROM orders_df -- orders_df как таблица!
""").to_df()
А теперь пример с join'ом нескольких DataFrames и оконной функцией. Мы сделаем LEFT JOIN по order_id, обработаем NULL в статусе с COALESCE, и добавим ранжирование по сумме заказов с ROW_NUMBER():
result_df = duckdb.query("""
SELECT
o.order_id,
o.customer,
o.amount,
COALESCE(d.status, 'Not Delivered') AS delivery_status, -- Обработка NULL
ROW_NUMBER() OVER (ORDER BY o.amount DESC) AS rank_by_amount -- Оконная функция!
FROM orders_df AS o -- Первый DataFrame как таблица 'o'
LEFT JOIN deliveries_df AS d -- Второй DataFrame как таблица 'd'
ON o.order_id = d.order_id
""").to_df()
# Выводим результат (для примера)
print(result_df)Красота! Мы объединили два DataFrames, применили оконную функцию — всё в одном SQL-запросе и без знаний синтаксиса Pandas.
Итог:
🍸 Если вы нашли пост для себя полезным, то кидайте 🔥 или ❤️!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓А вы знали о таком способе взаимодействия с Pandas DataFrames пишите в комментариях?
👀 В комментариях приложу готовый notebook, чтобы вы могли самостоятельно пощупать, все что описано в посте.
@dima_sqlit