こんにちは,shun(@datasciencemore)です!!
今回はapply(シリーズの行処理)について学習していきます.
applyは,シリーズの各行に対して関数を適用するメソッドです.
イメージとしてはこのようになります.
シリーズと関数をapplyに適用すると,シリーズの各行に関数を適用した結果が出力されます.
これだけだとよくわからないと思うので,具体例で確認してみましょう.
0.準備
1 2 3 4 5 6 7 8 9 10 11 12 |
# パッケージ読み込み import numpy as np import polars as pl import seaborn as sns # データフレームの表示行数を指定 pl.Config.set_tbl_rows(8) # データ読み込みと列選択 series = pl\ .from_pandas(sns.load_dataset("diamonds"))\ .get_column("color") |
1.apply(シリーズの行処理)の基本
例えば,以下のようなシリーズと関数を考えます.
シリーズ:df(ダイヤモンドデータ)のcolor列
関数:EとIであればそのままで,EとI以外であればnot_E_Iと出力する.
このシリーズと関数をapplyに適用すると,以下に示すシリーズを出力します.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 関数 # "E" ⇒"E" # "I" ⇒"I" # それ以外⇒"not_E_I" def func(x): if x == "E": return("E") elif x == "I": return("I") else: return("not_E_I") # apply適用 series.apply(func) |
2.apply(シリーズの行処理)とwith_columns
applyはwith_columnsと相性がよく,併用することが多いです.
例えば,このように条件が複数あるような処理についてもapplyとwith_columnsを併用すれば,比較的簡単にコーディングすることができます.
今回は,with_columnsを使用して先程の処理(EとIであればそのままで,EとI以外であればnot_E_Iと出力する.)によって得たシリーズを,dfの新しい列としてあげましょう.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# データ読み込みと列選択 df = \ pl\ .from_pandas(sns.load_dataset("diamonds"))\ .select("depth", "table", "color") # color列にfuncを適用した結果を新しい列に格納 df_rev = \ df.with_columns( color_rev = pl.col("color").apply(func) ) # データフレーム確認 df_rev |
上の処理は、以下のようにwith_columnsとwhenを利用してもOKです。
1 2 3 4 5 6 7 8 9 |
# applyを使用しないでwhenを使ってもOK df.with_columns( color_rev = pl.when(pl.col("color") == "E") .then("E") .when(pl.col("color") == "I") .then("I") .otherwise("not_E_I") ) |
まとめ
今回はapply(シリーズの行処理)について学習してきました.
- apply(シリーズの行処理)
- apply(シリーズの行処理)とwith_columns
applyは最初は概念を理解するのが難しいですが,慣れるとfor文よりも楽にコーディングできて非常に便利です.
使いこなせるように練習しましょう!
それでは,お疲れさまでした!!