PolarsのExpression
PolarsのContextsの中に書く
同じExpressionでも、異なるcontextに応じて異なる結果になる
遅延評価される
実行前に良い感じに最適化されるために高速になるらしい ref
docs
user guide
PolarsのExpression Plugins
pl.when()
pl.cast()
Polarsの文字列操作
PolarsのStruct型
Polarsで日時を扱う
Polarsで欠損値を扱う
PolarsでListを扱う
こういう、直観どおりの計算式のこと
code:py
pl.col("weight") / (pl.col("height") ** 2)
Expression expansion
以下2つは同じ意味
code:py
pl.col("weight", "height").mean().name.prefix("avg_")
code:py
[
pl.col("weight").mean().alias("avg_weight"),
pl.col("height").mean().alias("avg_height"),
]
/mrsekut-book-4297141388/127 (4-3 Expression)
#wip
Polarsのダミー値周り
ランダムに抽出する場合はsample系のmethodを使う
https://docs.pola.rs/api/python/stable/reference/dataframe/api/polars.DataFrame.sample.html
https://docs.pola.rs/api/python/dev/reference/expressions/api/polars.Expr.sample.html
etc.
ダミーの値を生成したいなら普通にnumpy.randomとかを使う
https://stackoverflow.com/a/76052427
code:py
df = pl.DataFrame({"foo": 1, 2, 3})
df.with_columns(pl.lit(np.random.rand(df.height)).alias("prob"))
code:py
n = _sheet.height
random_stock = np.random.randint(1, 10, size=n)
random_dates = np.array(random_datetime(datetime(2025, 1, 30), datetime(2025, 2, 2)) for _ in range(n))
sheet = (
_sheet
.with_columns([
pl.Series("実在庫数", random_stock),
pl.Series("カウント日", random_dates),
])
)
categorical
カラムの内容が、赤、黄、青、みたいに決まったカテゴリに限るやつの扱い
https://docs.pola.rs/user-guide/expressions/categorical-data-and-enums
内部で辞書を作るので、普通に文字列を使うより高速らしい
2種類
Enum
事前にカテゴリが決まっているもの
pl.Enum()
Categorical
カテゴリが不明または固定されていないもの
pl.Categorical()
aggregation
polars.DataFrame.group_by()
polars: GroupBy.agg()
Window関数
array
https://docs.pola.rs/user-guide/expressions/lists-and-arrays/
pl.Array
各行の要素数が同じである
arrayというよりtupleのイメージ?mrsekut.icon
Pythonのuser-defined functions
https://docs.pola.rs/user-guide/expressions/user-defined-functions/
numpyの関数でmapしたりできる
pl.Expr.map_elements
pl.map_batches()
streamingにも対応している
(もちろん自分で定義しても良い)
code:py
import numpy as np
out = df.select(pl.col("values").map_batches(np.log))