polarsで行ごとにnull_countを行う方法¶
各行に含まれるnull数が特徴量になるデータセットがあったため、polarsで実装しようとしたところ、
意外と手こずったので備忘録として残しておきます。
コード¶
In [1]:
import polars as pl
In [6]:
df_test = (
pl.DataFrame({
"col_1": [1, 2, 3, None],
"col_2": [None, 2, 3, 4],
"col_3": [None, 2, None, 4]
})
)
df_test
Out[6]:
shape: (4, 3)
col_1 | col_2 | col_3 |
---|---|---|
i64 | i64 | i64 |
1 | null | null |
2 | 2 | 2 |
3 | 3 | null |
null | 4 | 4 |
列ごとのnull_countはdataframe.null_count()
で完了できますが、行ごとは機能として持ち合わせていません(今のところ)。
そこで、以下のようにします。
In [7]:
(
df_test
.with_columns(
null_count = pl.sum_horizontal(pl.all().is_null())
)
)
Out[7]:
shape: (4, 4)
col_1 | col_2 | col_3 | null_count |
---|---|---|---|
i64 | i64 | i64 | u32 |
1 | null | null | 2 |
2 | 2 | 2 | 0 |
3 | 3 | null | 1 |
null | 4 | 4 | 1 |
pl.all().is_null()
により、全てのデータに対してnullかどうかの判別を行います。(null
の場合True
)
そのうえでsum_horizontal()
を行うと、True
が1、False
が0として処理されるため、null数がカウントできるという仕組みです。
最後に¶
いかがだったでしょうか。非常に完結に書くことができて、polarsいい感じです。polarsもっと広まれ!!
コメント