コンテンツにスキップ

Polars - 高速 DataFrame ライブラリ チートシート

Polars - 高速 DataFrame ライブラリ チートシート

Polarsは Rust で書かれた高性能のDataFrame ライブラリで、Python、R、Node バインディングを持つ。デフォルトではマルチスレッド、Apache Arrow列メモリ上に構築され、クエリ オプティマイザを持つ遅延APIを提供する。大規模データセットでは通常、pandas より何倍も高速で、メモリを使用しながら、その式API はより明確に構成される。2026年の新しいデータ作業のデフォルト推奨になった。

インストール

方法コマンド
pippip install polars
uvuv add polars
エクストラ付きpip install "polars[all]" (excel、database、plotting)
確認python -c "import polars as pl; print(pl.__version__)"

読み込みと書き込み

操作コード
CSVpl.read_csv("data.csv")
Parquetpl.read_parquet("data.parquet")
JSONpl.read_json("data.json")
データベースpl.read_database(query, connection)
遅延 CSVpl.scan_csv("data.csv") (遅延)
遅延 Parquetpl.scan_parquet("*.parquet")
書き込みdf.write_parquet("out.parquet")

イーガー vs 遅延 (鍵となるアイデア)

import polars as pl

# イーガー:すぐに実行
df = pl.read_csv("sales.csv")
result = df.filter(pl.col("amount") > 100).group_by("region").agg(pl.col("amount").sum())

# 遅延:計画を構築し、最適化してから .collect() で実行
result = (
    pl.scan_csv("sales.csv")
      .filter(pl.col("amount") > 100)
      .group_by("region")
      .agg(pl.col("amount").sum())
      .collect()
)

遅延モードにより、オプティマイザがフィルタをスキャンに下げ、必要な列のみを読み込むことができる — 大きなファイルで大きなスピードアップ。実際のワークロードのために scan_* + .collect() を選択。

式 (コアAPI)

行うこと
pl.col("x")列を参照
pl.col("x").sum()集約
pl.col("x").alias("y")出力を名前変更
pl.col("*")すべての列
pl.lit(5)リテラル値
pl.when(cond).then(a).otherwise(b)条件付き

選択とフィルタリング

タスクコード
列を選択df.select("a", "b")
計算列df.with_columns((pl.col("a") * 2).alias("a2"))
行をフィルターdf.filter(pl.col("a") > 10)
複数の条件df.filter((pl.col("a") > 10) & (pl.col("b") == "x"))
Head/taildf.head(10)df.tail(10)
ソートdf.sort("a", descending=True)
ユニークdf.unique(subset=["a"])

集約とグループ化

(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"),
   ))
集約
合計/平均/最小/最大.sum().mean().min().max()
カウント.count().n_unique()
最初/最後.first().last()
パーセンタイル.quantile(0.95)
リスト収集.implode()

結合

タイプコード
内部a.join(b, on="id")
a.join(b, on="id", how="left")
外側a.join(b, on="id", how="full")
アンチa.join(b, on="id", how="anti")
セミa.join(b, on="id", how="semi")
As-of (時間)a.join_asof(b, on="ts")

文字列、日付、リスト

ネームスペース
.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)

相互運用性

ターゲットコード
pandasdf.to_pandas() / pl.from_pandas(pdf)
Arrowdf.to_arrow()
NumPydf.to_numpy()
DuckDBDuckDB から直接 Polars フレームをクエリ

Polars vs pandas

側面Polarspandas
エンジンRust、マルチスレッドPython/C、ほぼ シングルスレッド
メモリArrow列NumPy-backed
遅延オプティマイザはいいいえ
API式ベース、構成可能インデックス中心
エコシステム急速に成長膨大、成熟

SQL-最初の分析のためにDuckDBと組み合わせ;pandasはエコシステム幅のために価値が残る。

リソース