Всё больше дата сайнтистов мигрируют с 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
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст