TGViewer
Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) @dima_sqlit · 2.28K subscribers
Post #42 1.48K
🤩 Нужен ли Pandas, если вы знаете SQL? Как работать с DataFrames через SQL-синтаксис с помощью библиотеки DuckDB:

Если вы знаете только 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
  • 🔥 16
  • ❤ 7
More from @dima_sqlit
  1. Sep 22, 2026Что сейчас стоит изучать Аналитику — чтобы перейти в DS/ML ? Замечаю общий тренд на изучен…
  2. Sep 21, 2026🧠 Уровень абстракции — навык, который сэкономит вам годы учёбы: Когда я начинал изучать P…
  3. Sep 18, 2026🏦 Задача с собеса в Т-банк на SQL: вторая зарплата в отделе Условие: есть таблица сотрудн…
  4. Sep 16, 2026🏠 IT ипотека (Часть 3) — Как я сэкономил на ремонте: кэшбэк, промокоды и один неочевидный…
  5. Sep 7, 2026🍂 Осень — сезон найма: Каждый год одна и та же история — в сентябре рынок будто просыпает…
  6. Aug 24, 2026P-value простыми словами: Условие: подбросили монету 10 раз, выпало 9 орлов. Можно ли тепе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →