TGViewer
Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение @dsproglib · 18.3K subscribers
Post #7557 1.41K
LLM переводит pandas в Polars: что получается и где ошибается

Всё больше дата сайнтистов мигрируют с pandas на Polars через LLM: скормил скрипт, получил Polars, проверил что результат совпадает.

Команда Polars провела эксперимент — перевели 33 реальных запроса через Claude Opus и замерили качество.

31 из 33 переводов запустились и дали правильный результат. Это уже хорошо — год назад модели регулярно мешали pandas и Polars API и выдавали нерабочий код.

Большинство переводов читается как идиоматичный Polars. Но два паттерна остались.

⚠️ Паттерн 1: переводит структуру, а не намерение

Задача: добавить к каждой строке агрегат за 5-минутное окно. В pandas — resample + merge_asof. LLM перевёл точно так же:


# LLM переводит pandas-структуру
five_min = minute.group_by_dynamic("datetime", every="5m").agg(...)
result = minute.join_asof(five_min, on="datetime", strategy="backward")


Но в Polars для этого есть .over() — window function которая добавляет агрегат к каждой строке без промежуточного фрейма:


# Идиоматичный Polars
result = minute.with_columns(
pl.col("close").mean().over(pl.col("datetime").dt.truncate("5m")),
pl.col("volume").sum().over(pl.col("datetime").dt.truncate("5m")),
)


Одна операция вместо двух. Такой паттерн встретился в 3 из 33 случаев.


⚠️ Паттерн 2: извлекает скаляр в середине пайплайна


# LLM делает так — два прохода по данным
threshold = lf.select(pl.col("revenue").quantile(0.9)).collect().item()
result = lf.filter(pl.col("revenue") > threshold).collect()

# Идиоматичный Polars — один проход
result = lf.filter(
pl.col("revenue") > pl.col("revenue").quantile(0.9)
).collect()


.item() в середине пайплайна форсирует преждевременный collect() и разбивает оптимизацию запроса на два независимых шага.

Команда Polars упаковала правила в SKILL.md и загрузила в Claude Code. После этого:
— join-back паттерны: 3 → 1 случай
— mid-pipeline .item(): 1 → 0 случаев
— общий результат: 32/33 правильных

💡 Если мигрируете pandas → Polars через LLM — всегда проверяйте результат через polars.testing.assert_frame_equal. Код может работать и давать правильный ответ, но оставаться неидиоматичным и медленным. Особенно смотрите на join-back паттерны где .over() выразительнее и быстрее.

🔗 Ссылка на skill

📍 Навигация: ВакансииЗадачиСобесы

Библиотека дата-сайентиста

#буст
  • 👍 4
  • 🤩 1
More from @dsproglib
  1. Sep 21, 2026🎲 Что общего у кубика Рубика и AI? Поиск по пространству состояний Кубик Рубика можно пре…
  2. Sep 20, 2026Что выведет код? 👍 — {} 👾 — {«x»: 1} 🥰 — Error 🔥 — None 🐸 Библиотека задач по Data Sc…
  3. Sep 19, 2026🌞 3 open-source инструмента для AI-агентов 🔘 Agent-Reach — доступ к Twitter/X, YouTube,…
  4. Sep 18, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
  5. Sep 18, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека дата-сайентиста
  6. Sep 17, 2026🤗 Fine-tuning LLM в Google Colab — без собственной GPU Unsloth Studio позволяет попробова…
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 →