続編があるかもしれないので①とします。
pandasだとあまり気にしていなかった型についてです。 pandasですと特に指定しなければ、全ての数値データはIntegerかfloatになるかと思います。
しかしpolarsはどうも違うみたいですね。
print(pl.DataFrame({"hoge": [1, 2, 3, 3, 3,3]}).select(pl.col('hoge').unique())) >>> shape: (3, 1) ┌──────┐ │ hoge │ │ --- │ │ i64 │ ╞══════╡ │ 1 │ │ 2 │ │ 3 │ └──────┘
上記の例では、pl.Int64型になっているのに、下記では、UInt32型を返してきます。
import polars as pl pl.DataFrame({"hoge_str": ["hoge", "huga", "huge"]}).select(pl.col('hoge_str').str.lengths()) >>> shape: (3, 1) ┌──────────┐ │ hoge_str │ │ --- │ │ u32 │ ╞══════════╡ │ 4 │ │ 4 │ │ 4 │ └──────────┘
なんで処理によって型推論のロジックを変えているのかは今後documentを見て勉強します。
文字の数え上げなどをするときは、当たり前ですが、負の整数になりません。 しかし数え上げた文字をグループごとに差を特徴量として見たいときがあるかと思います。 なんとなくUIntで返ってきた変数で差分など計算したら、マイナスになった瞬間オーバーフローして10桁の数字が返ってきてしまうかもしれませんね...
Version
pl.__version__ >>> '0.16.4'