Pythonでデータ分析といえば Pandas が定番ですが、近年注目を集めているのが Polars です。Rustで実装されていて、超高速・低メモリ・並列処理対応が特徴。大きめのデータを扱う人や、処理速度に悩んでいる人には特におすすめです。
ここでは短時間で読めるように、基本の使い方とPandasとの違いを整理します。
🚀 Polarsの特徴
- 列指向(columnar storage)
列ごとの処理に最適化されており、集計や数値計算が速い。 - マルチスレッド処理
標準でCPUをフル活用。特に大規模データで差が出る。 - Eager / Lazy モード
即時実行(Pandasに近い)と遅延評価(Sparkに似ている)を切り替え可能。 - Pandas互換あり
to_pandas()やfrom_pandas()で簡単に相互変換できる。
🛠️ インストール
pip install polarsBash📑 基本操作(Eagerモード)
Pandas感覚で扱えるのでとっつきやすいです。
import polars as pl
# データ読み込み
df = pl.read_csv("data.csv")
# カラム選択とフィルタ
df2 = (
df.select(["id", "value", "category"])
.filter(pl.col("value") > 10)
.with_columns((pl.col("value") * 2).alias("value_x2"))
)
print(df2)Bash集計(groupby)
agg = df2.groupby("category").agg([
pl.col("value").sum().alias("sum_value"),
pl.col("value").mean().alias("mean_value")
])
print(agg)BashPandasとの違いは、メソッドチェーンと「Expressions」中心の書き方。pl.col("value") のように「列」を指定して操作するのが基本です。
⚡ Lazyモード(最適化された遅延評価)
大きなデータや複雑なパイプラインでは、Lazyモードが効率的です。
lazy = (
pl.scan_csv("big.csv") # 遅延読み込み
.filter(pl.col("x") > 0)
.with_columns((pl.col("y") / pl.col("x")).alias("ratio"))
.groupby("group").agg(pl.col("ratio").mean())
)
# collect()を呼ぶまで実行されない
result = lazy.collect()BashPolars内部でクエリ最適化が走るため、不要な処理を省略して効率的に実行してくれます。
Pandasにはない強力な機能です。
🔗 Join(結合)の例
left = pl.DataFrame({"id": [1,2,3], "a":[10,20,30]})
right = pl.DataFrame({"id":[2,3,4], "b":[100,200,300]})
joined = left.join(right, on="id", how="left")
print(joined)
BashPandasと同じ感覚で使えるので安心。
🔄 Pandasとの相互運用
既存コードと併用も簡単です。
# Polars → Pandas
pdf = df.to_pandas()
# Pandas → Polars
import pandas as pd
df2 = pl.from_pandas(pdf)
Bash🎯 よく使う便利な表現
Polarsは「Expression API」で柔軟に操作できます。
# 文字列検索
df.filter(pl.col("name").str.contains("foo"))
# ランク付け
df.with_columns(pl.col("score").rank().alias("rank"))
# 条件分岐
df.with_columns(
pl.when(pl.col("value") > 0).then("positive").otherwise("negative").alias("sign")
)
Bash📝 Polarsを選ぶ基準
- ✅ データが数百万行以上でPandasが遅い
- ✅ 並列処理でスピードを上げたい
- ✅ 複雑な集計をまとめて最適化したい
- ❌ 小規模で簡単な処理 → Pandasで十分
📌 まとめ
- Polarsは 次世代のDataFrameライブラリ
- Pandas感覚で使えるが、速くて省メモリ
- Lazyモードで大規模処理を最適化
- Pandasとの移行も簡単なので、まずは部分的に導入がおすすめ


コメント