Kaggleで写経をしていると、map関数を使っている場面によく遭遇します。map関数ってどうやって使えるのでしょうか?
map(関数, リスト)で、リストに関数を適用できる
map関数は至って簡単です。map(関数, リスト)として、リストに関数を一括適用します。
例として、2019年における職場のメンバーの年齢をリストにします。
member_age_2019 = [50, 41, 36, 31, 28]
では、1年後の2020年における年齢を表現するにはどうすればいいでしょうか。まずは、年齢が1つ増える関数を定義します。
def next_year(x):
return x+1
そして、map関数を使います。map(関数, リスト)の形です。
member_age_2020 = map(next_year, member_age_2019)
member_age_2020
<map at 0x1160383c8>
map関数は、リストではなくてイテレータという形式のものを返します。イテレータというのはリストのようなもんですが、そのままでは中身が見えません。
よって、イテレータをリストに変換するlist()で囲ってあげます。
member_age_2020 = map(next_year, member_age_2019)
list(member_age_2020)
[51, 42, 37, 32, 29]
無事に、全メンバーの年齢が1つ増えました。とても簡単です。
lambda式を使えば、わざわざ関数を定義しなくて済む
lambda(ラムダ)式を使えば、わざわざ関数を定義しなくて済むようになります。lambda式とは、「lambda x:○○」という形のものです。
年齢が1つ増えるようにしたいのならば、このように書きます。
lambda x:x+1
非常にシンプルです。「lambda x:x+1」をひとかたまりの関数としてmap関数に入れてみます。
member_age_2020 = map(lambda x:x+1, member_age_2019)
list(member_age_2020)
[51, 42, 37, 32, 29]
defでわざわざ関数を定義せずとも、年齢を1つ増やすことができました。
pandasでもmap関数が使える
map関数は、リストだけでなくpandasにも使えます。詳しくはこちらの記事を参照ください。map関数によく似たapply関数についても書いています。
Pandasでmapメソッドやapplyメソッドを使う。lambda式もあり。こちらの記事では、リストにmap関数を適用し、リストの中身を一括で変換する方法について言及しました。
https://punhundo...