TGViewer
Симулейтив Симулейтив @simulative_official · 7.46K subscribers
Post #3173 1.25K
Pandas vs SQLite: когда стоит «нырнуть» в SQL прямо из Python

Привет! На связи Александр Грудинин, ментор курса «Аналитик данных» 👋🏻

Pandas — это отличный инструмент, но иногда попадаешь в ситуацию, где что-то идёт не так:

🟠 groupby + transform превращается в многоэтажную конструкцию;
🟠 Коллега присылает готовый SQL-запрос, и его нужно «просто запустить»;
🟠 Данных много, и держать всё в памяти не хочется.

В такие моменты удобно знать, что SQLite можно поднять прямо внутри Python без сервера, без установки и даже без файла на диске. Просто :memory: — и всё живёт в оперативке как обычный датафрейм, только запросы пишешь на SQL.

Давайте покажу на примере.

Данные

import pandas as pd
import numpy as np
import sqlite3

dates = pd.date_range('2026-01-01', periods=30, freq='D')
stores = ['Москва', 'СПб', 'Казань']

df = pd.DataFrame([
{'date': d, 'store': s,
'revenue': np.random.randint(50_000, 300_000),
'orders': np.random.randint(10, 150)}
for d in dates for s in stores
])


Задача: по каждому магазину посчитать накопленную выручку, скользящее среднее за 7 дней и ранг дня по выручке.

🐼 Вариант 1: pandas

df = df.sort_values(['store', 'date'])

df['running_total'] = df.groupby('store')['revenue'].cumsum()

df['rolling_avg_7d'] = (
df.groupby('store')['revenue']
.transform(lambda x: x.rolling(7, min_periods=1).mean())
)

df['day_rank'] = (
df.groupby('store')['revenue']
.rank(method='dense', ascending=False)
)


🗄 Вариант 2: SQLite

conn = sqlite3.connect(':memory:')  # всё в оперативке, налету, никаких файлов!
df.to_sql('sales', conn, index=False)

result = pd.read_sql("""
SELECT
*,
SUM(revenue) OVER (PARTITION BY store ORDER BY date) AS running_total,
ROUND(AVG(revenue) OVER (PARTITION BY store ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW), 0) AS rolling_avg_7d, DENSE_RANK() OVER (PARTITION BY store ORDER BY revenue DESC) AS day_rank
FROM sales
ORDER BY store, date

""", conn)

conn.close()


Подведём итог. Когда можно использовать SQLite:

➡️ Есть готовый SQL-запрос, который жалко переписывать на pandas;
➡️ Оконная логика сложная, и OVER читается понятнее, чем groupby + transform;
➡️ Нужно произвести сложные JOIN’ы.

В целом SQLite — это не конкурент pandas, а ещё один способ решить задачу работы с данными. И порой самое элегантное решение — кинуть датафрейм в :memory:, написать читаемый запрос и вернуть результат обратно в Python.

Было полезно? Ставьте 🔥 и ждите от меня ещё больше полезных материалов!

📈 Симулейтив
  • 🔥 20
  • ❤ 5
  • 👍 2
More from @simulative_official
  1. Sep 30, 2026💻💻💻💻💻 Откуда на самом деле берутся данные? На учебных задачах всё просто: тебе дают г…
  2. Sep 30, 2026⭐️ Топ метрик, которые должен уметь считать каждый аналитик Рекламные метрики — это не про…
  3. Sep 29, 2026⭐️ Уже сегодня: как ML-инженер учит компьютер находить смысл в тексте Сегодня покажем проф…
  4. Sep 28, 2026#проанализировали_и_поняли
  5. Sep 27, 2026💻💻💻💻💻 Как работает ML-инженер — на примере поиска похожих текстов Пользователь вводит…
  6. Sep 25, 2026Сегодня собираем ETL-пайплайн на данных GitHub — от источника до дашборда Сегодня в 19:00…
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 →