TGViewer
SQL и Анализ данных SQL и Анализ данных @databases_tg · 12.5K subscribers
Post #999 3.67K
🔥 Polars: шпаргалка

Polars ≠ Pandas. Это колоночный движок, вдохновлённый Rust и SQL. Никаких SettingWithCopyWarning — всё иммутабельно и параллелится.

🚀 Быстрый старт


import polars as pl

df = pl.DataFrame({
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
"score": [95, 85, 100]
})


📊 Выборка и фильтрация


df.filter(pl.col("score") > 90)
df.select(pl.col("name").str.lengths())
df[df["id"] == 2]


• Комбинированные условия:

df.filter((pl.col("score") > 80) & (pl.col("name").str.contains("A")))


---

## ⚙️ Трансформации

• Вычисление новых колонок:

df.with_columns([
(pl.col("score") / 100).alias("percent"),
pl.col("name").str.to_uppercase().alias("name_upper")
])


• Удаление/переименование:

df.drop("id").rename({"name": "username"})


• apply() — только если нельзя обойтись иначе:

df.with_columns(
pl.col("score").map_elements(lambda x: x * 2).alias("doubled")
)


🧠 Группировка и агрегаты



df.groupby("name").agg([
pl.col("score").mean().alias("avg_score"),
pl.count()
])


• Агрегация с кастомной функцией:

df.groupby("name").agg(
(pl.col("score") ** 2).mean().sqrt().alias("rms")
)


---

## 🪄 Ленивая обработка (LazyFrame)


lf = df.lazy()
result = (
lf
.filter(pl.col("score") > 90)
.with_columns(pl.col("score").log().alias("log_score"))
.sort("log_score", descending=True)
.collect()
)


✅ Всё оптимизируется *до выполнения* — pushdown, predicate folding, projection pruning.

🔥 Joins


df1.join(df2, on="id", how="inner")


Варианты: "inner", "left", "outer", "cross", "semi", "anti"

📂 Работа с файлами


pl.read_csv("data.csv")
df.write_parquet("out.parquet")
pl.read_json("file.json", json_lines=True)


Ленивая загрузка:

pl.read_parquet("big.parquet", use_pyarrow=True).lazy()


---

## 🧮 Аналитика и окна


df.with_columns([
pl.col("score").rank("dense").over("group").alias("rank"),
pl.col("score").mean().over("group").alias("group_avg")
])


🧱 Структуры, списки, explode


df = pl.DataFrame({
"id": [1, 2],
"tags": [["a", "b"], ["c"]]
})
df.explode("tags")


• Работа с вложенными списками:

df.select(pl.col("tags").list.lengths())


🧪 Полезные фичи

• Проверка типов:

df.schema
df.dtypes


• Проверка на null:

df.filter(pl.col("score").is_null())


• Заполнение:

df.fill_null("forward")


• Выбор n лучших:

df.sort("score", descending=True).head(5)


📦 Советы и best practices

• Используй lazy() для производительности.

• Избегай .apply() — если можешь, используй pl.col().map_elements() или векторные выражения.

• Сохраняй schema — удобно при пайплайнах данных.

• @pl.api.register_expr_namespace("yourns") — добавляй кастомные методы как namespace.


✅ Polars: минимализм, скорость, безопасность.
  • ❤ 14
  • 👍 5
  • 🔥 4
  • 🥱 1
More from @databases_tg
  1. Oct 2, 2026Как SQLite превращает числа в текст в 2 раза быстрее? Трюк с парами цифр Обычно число пере…
  2. Oct 2, 2026В субботу, 17 октября, Москва станет точкой притяжения для всех специалистов в области Rec…
  3. Oct 1, 2026Жиз
  4. Sep 30, 2026📝 5 уровней ИИ-агентов: от промпта до продакшена Context, loop, Jev, harness и evals: раз…
  5. Sep 26, 2026UPDATE — оператор обновления данных в MySQL 🗂️ Если в таблице нужно изменить значение в у…
  6. Sep 25, 2026🧠 SQL-задача с подвохом Есть таблица транзакций: CREATE TABLE transactions ( id int PRIMA…
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 →