こんにちは,shun(@datasciencemore)です!!
今回はapplyについて学習していきます.
applyは,データフレームの各行に対して関数を適用するメソッドです.
イメージとしてはこのようになります.
データフレームと関数をapplyに適用すると,データフレームの各行に関数を適用した結果が出力されます.
mapのデータフレーム版だと考えればわかりやすいと思います.
なお,axis=1と設定する必要があることに注意してください.
0.準備
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# パッケージ読み込み import pandas as pd import numpy as np import seaborn as sns # データフレームの表示行数を指定 pd.set_option('display.max_rows',8) # データ読み込みと列選択(メソッドチェーン) df = \ sns\ .load_dataset('diamonds')\ .filter(["depth", "color"]) |
1.applyの基本
例えば,以下のデータフレームと関数を考えます.
データフレーム:df(ダイヤモンドデータ)のdepth列,color列
関数:color列がEであれば,depth列の数値を,color列がIIであれば0を,そうでなければ1と出力する.
このデータフレームと関数をapplyに適用すると,このようなシリーズを出力します.
1 2 3 4 5 6 7 8 |
# 関数 def func(x): if x["color"] == "E": return x["depth"] elif x["color"] == "I": return 0 else: return 1 |
1 2 |
# apply適用 df.apply(func, axis=1) |
2.applyとassign
applyは,mapと同様,assignと相性がよく,併用することが多いです.
例えば,このように条件が複数あるような処理についてもapplyとassignを併用すれば,比較的簡単にコーディングすることができます.
1 2 |
# assignを使用 df.assign(color_rev = lambda x:x.apply(func, axis=1)) |
3.mapとapply
mapとapplyを比較はこちらの表のようになります.
実は今まで説明してきませんでしたが,applyはデータフレームだけでなく,シリーズもインプットとすることが可能です.
ただ,はっきり言ってこの表は覚える必要はありません.
なぜなら今まで説明してきたとおり,
- シリーズをインプットとするならばmap
- データフレームをインプットとするならばapply
と覚えておけば,困ることはないからです.
この表をみてもわかるとおり,基本mapのほうが性能がいいです.
なので,mapが使用できるのであれば,mapを使用すればいいということになります.
mapが使用できるのは,インプットがシリーズのときなので,
インプットがシリーズのときは,mapを使用する.
そうでないとき,すなわち,インプットがデータフレームのときは,applyを使用する .
と覚えておけば,自然と最適なコーディングができます.
まとめ
今回はapplyについて学習してきました.
- applyの基本
- applyとassign
- mapとapply
applyはmapと似ています.
違いは色々ありますが,細かいことは気にしないで
- インプットがシリーズ ⇒ map
- インプットがデータフレーム ⇒ apply
と覚えておけばOKです!!
mapと同様,applyも最初は概念を理解するのが難しいですが,慣れるとfor文よりも楽にコーディングできて非常に便利です.
使いこなせるように練習しましょう!
それでは,お疲れさまでした!!
次回
-
【pandas】applymap:データフレームの要素処理【繰り返し処理】
こんにちは,shun(@datasciencemore)です!! 今回はapplymapについて学習していきます. applymapは,データフレームの各要素に対して関数を適用するメソッドです. イメ ...
続きを見る