Zum Inhalt springen

Polars – Fast DataFrame Library Cheatsheet

Polars – Fast DataFrame Library Cheatsheet

Polars ist eine High-Performance DataFrame-Bibliothek in Rust geschrieben mit Python-, R- und Node-Bindings. Es ist standardmäßig Multi-Threaded, auf Apache Arrow spalten-basiertem Speicher aufgebaut und bietet eine Lazy API mit einem Query-Optimizer, der die Arbeit vor der Ausführung neu ordnet und beschneidet. Bei großen Datensätzen ist es typischerweise viele Male schneller als Pandas und verwendet weniger Speicher, während seine Expression-API sauberer zusammengesetzt wird. Es ist 2026 die Standard-Empfehlung für neue Datenarbeit geworden.

Installation

MethodeBefehl
pippip install polars
uvuv add polars
Mit Extraspip install "polars[all]" (excel, database, plotting)
Überprüfenpython -c "import polars as pl; print(pl.__version__)"

Lesen & Schreiben

OperationCode
CSVpl.read_csv("data.csv")
Parquetpl.read_parquet("data.parquet")
JSONpl.read_json("data.json")
Databasepl.read_database(query, connection)
Lazy CSVpl.scan_csv("data.csv") (aufgeschoben)
Lazy Parquetpl.scan_parquet("*.parquet")
Schreibendf.write_parquet("out.parquet")

Eager vs Lazy (die Kernidee)

import polars as pl

# Eager: führt sofort aus
df = pl.read_csv("sales.csv")
result = df.filter(pl.col("amount") > 100).group_by("region").agg(pl.col("amount").sum())

# Lazy: baut einen Plan, optimiert, dann läuft auf .collect()
result = (
    pl.scan_csv("sales.csv")
      .filter(pl.col("amount") > 100)
      .group_by("region")
      .agg(pl.col("amount").sum())
      .collect()
)

Lazy-Modus lässt den Optimizer Filter nach unten zum Scan drücken und liest nur benötigte Spalten – oft eine große Speedup bei großen Dateien. Bevorzugen Sie scan_* + .collect() für echte Workloads.

Expressions (die Kern-API)

ExpressionMacht
pl.col("x")Referenzieren Sie eine Spalte
pl.col("x").sum()Aggregieren
pl.col("x").alias("y")Ausgabe umbenennen
pl.col("*")Alle Spalten
pl.lit(5)Literal Wert
pl.when(cond).then(a).otherwise(b)Konditional

Auswählen & Filtern

AufgabeCode
Spalten wählendf.select("a", "b")
Berechnete Spaltedf.with_columns((pl.col("a") * 2).alias("a2"))
Reihen filterndf.filter(pl.col("a") > 10)
Mehrere Bedingungendf.filter((pl.col("a") > 10) & (pl.col("b") == "x"))
Head/Taildf.head(10), df.tail(10)
Sortierendf.sort("a", descending=True)
Eindeutigdf.unique(subset=["a"])

Aggregation & Gruppierung

(df.group_by("region")
   .agg(
       pl.col("amount").sum().alias("total"),
       pl.col("amount").mean().alias("avg"),
       pl.col("order_id").n_unique().alias("orders"),
   ))
AggregationExpression
Sum/Mean/Min/Max.sum(), .mean(), .min(), .max()
Count.count(), .n_unique()
First/Last.first(), .last()
Quantile.quantile(0.95)
List Collect.implode()

Joins

TypCode
Innera.join(b, on="id")
Lefta.join(b, on="id", how="left")
Outera.join(b, on="id", how="full")
Antia.join(b, on="id", how="anti")
Semia.join(b, on="id", how="semi")
As-of (Zeit)a.join_asof(b, on="ts")

Strings, Dates, Lists

NamespaceBeispiel
.strpl.col("s").str.to_uppercase(), .str.contains("x")
.dtpl.col("t").dt.year(), .dt.truncate("1h")
.listpl.col("l").list.len(), .list.first()
.castpl.col("a").cast(pl.Int64)

Interop

ZielCode
Pandasdf.to_pandas() / pl.from_pandas(pdf)
Arrowdf.to_arrow()
NumPydf.to_numpy()
DuckDBFragen Sie Polars Frames direkt von DuckDB ab

Polars vs Pandas

AspektPolarsPandas
EngineRust, Multi-ThreadedPython/C, meist Single-Threaded
MemoryArrow SpaltenNumPy-unterstützt
Lazy OptimizerJaNein
APIExpression-basiert, zusammensetzbarIndex-zentrisch
ÖkosystemWächst schnellRiesig, reif

Für SQL-First Analytics über Dateien paaren Sie mit DuckDB; Pandas bleibt wertvoll für seine Ökosystem-Breite.

Ressourcen