最近よく使うPolars。
ハマったものを追記していくハマり小ネタ集を作る。
pl.whenで文字列型列が作れない
Polarsを使用していて以下エラーに遭遇
dateカラムから月の条件で四季の文字列が入った列を追加したかったのですがなぜか既存カラムを射影(pl.col(’spring’)みたいな)しにいってるような挙動のエラーが。
解決手段: pl.lit(’spring’)で記載
thenとotherwiseの文字列をpl.lit()でラップしたら解決。
確か前は文字列だけでもいけてた気がするんだけど破壊的変更の一つだったのかも。docには文字列例がないのでなかなか気づけなかった。
df = df.with_columns(
pl.when(pl.col('date').dt.month().is_in([4, 5, 6])).then(pl.lit("spring"))
.when(pl.col('date').dt.month().is_in([7, 8, 9])).then(pl.lit("summer"))
.when(pl.col('date').dt.month().is_in([10, 11, 12])).then(pl.lit("autumn"))
.otherwise(pl.lit("winter"))
.alias('season')
)
エラー自体あるべき挙動なのかも少し謎。
lazyframeでconcatされない
pahtsにはリスト型でparquetファイルまでのパスが格納されている
データ定義は同じなので縦に結合して一つのlazyframeを作成しようとした
データが存在しない。
解決手段: lazyframeをリスト格納してまとめてconcat
空のlazyframeがダメ?
import polarsするとカーネルがクラッシュする
レンタルサーバで環境構築してjupyterで実行するとクラッシュ。
原因調べているとimport polars
でクラッシュしていたことが分かった。
import polars
後のエラー
The following required CPU features were not detected:
avx2, fma, bmi1, bmi2, lzcnt, movbe
Continuing to use this version of Polars on this processor will likely result in a crash.
Install the `polars-lts-cpu` package instead of `polars` to run Polars with better compatibility.
解決手段: polars-lts-cpu
をインストール
エラーから、polarsでは特定のcpu機能が必要とのことでそちらがなければ使えないとのこと。
調べてみるとレンタルサーバのCPUがXeon® E5-2690 というものらしく古いものだったかららしい?
代わりにpolars-lts-cpu
をインストールすればいつも通りimport polars
が通るようになった。
キャプチャのように「カーネルがクラッシュしました。」しかでないし、エラーログ見てもundefined, Reason
で何が原因かも分からず原因特定かなり苦労した。
レンタルサーバで開発環境整えているかたは注意。