次回より『ヒデログ』とご検索ください

pandasのapply,applymap,mapの違い・使い方が分からなくなったへ

pandas

pandasには行列の操作に「apply」「applymap」「map」という名前がややこしいメソッドが存在します。どのメソッドがどのように働くのか・違いと使い方を解説します。

この記事を読むと分かる事

  • 「apply」「applymap」「map」の違いが分かる
  • 「apply」「applymap」「map」を使いこなせる

apply

apply「DataFrameの行または列及び各要素」と「Seriesの各要素」に適用させることができます。

import numpy as np
import pandas as pd
df=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'],index=['Tokyo','Kanagawa','Saitama'])
#          a b  c  d
# Tokyo    0 1  2  3
# Kanagawa 4 5  6  7
# Saitama  8 9 10 11

# No.1
f1=lambda x:x*2
df.apply(f1)
#           a  b  c  d
# Tokyo     0  2  4  6
# Kanagawa  8 10 12 14
# Saitama  16 18 20 22

# No.2
f2=lambda x:x.max()-x.min()
df.apply(f2)
# a 8
# b 8
# c 8
# d 8

# No.3
df['a'].apply(f1)
# Tokyo     0
# Kanagawa  8
# Saitama  16

# No.4
df['a'].apply(f2)
print(df['a'].apply(f2))
# error

コード解説

「apply」は「DataFrameの行または列及び各要素」と「Seriesの各要素」に適用させることができます。

  • No.1:DataFrameの各要素に対して適用させているので結果が出ます
  • No.2:DataFrameの行または列に対して適応しているので結果が出ます
  • No.3:Seriesの各要素に対して適応させているので結果が出ます
  • No.4:Seriesに対して適応させているのでerrorになります

applymapの使い方

applymap「DataFrameの各要素」に対して適応することができます

import numpy as np
import pandas as pd
df=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'],index=['Tokyo','Kanagawa','Saitama'])
#          a b  c  d
# Tokyo    0 1  2  3
# Kanagawa 4 5  6  7
# Saitama  8 9 10 11

# No.1
f1=lambda x:x*2
df.applymap(f1)
#           a  b  c  d
# Tokyo     0  2  4  6
# Kanagawa  8 10 12 14
# Saitama  16 18 20 22

# No.2
f2=lambda x:x.max()-x.min()
df.applymap(f2)
# error

# No.3
df['a'].applymap(f1)
# error

# No.4
df['a'].applymap(f2)
# error

コード解説

「applymap」は「DataFrameの各要素」に対して適応することができます。
ですので、

  • Np.1:DataFrameとして各要素に適応させているので結果が出ます
  • No.2:DataFrameの行または列に対して適応させているのでerrorになります
  • No.3:Seriesに適応させているのでerrorになります
  • No.4:Seriesの各要素に適応させているので結果が出ます

map

applymapDataFrameの各要素に適応させることができます。

import numpy as np
import pandas as pd
df=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'],index=['Tokyo','Kanagawa','Saitama'])
#          a b  c  d
# Tokyo    0 1  2  3
# Kanagawa 4 5  6  7
# Saitama  8 9 10 11

# No.1
f1=lambda x:x*2
df.map(f1)
# error

# No.2
f2=lambda x:x.max()-x.min()
df.map(f2)
# error

# No.3
df['a'].map(f1)
# Tokyo     0
# Kanagawa  8
# Saitama  16

# No.4
df['a'].map(f2)
# error

コード解説

「map」は「Seriesの各要素」に対して適応することができます。

  • No.1:DataFrameの各要素に対して適用させているのでerrorになります
  • No.2:DataFrameの行または列に対して適応しているのでerrorになります
  • No.3:Seriesの各要素に対して適応させているので結果が出ます
  • No.4:Seriesに対して適応させているのでerrorになります

まとめ

  • apply」は「DataFrameの行または列及び各要素」と「Seriesの各要素」に適用させることができる
  • applymap」は「DataFrameの各要素」に対して適応することができる
  • map」は「Seriesの各要素」に対して適応することができる
apply applymap map
DataFrameの行・列 × ×
DataFrameの各要素 ×
Seriesの全体 × × ×
Seriesの各要素 ×

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です