Pandas の apply、map と applymap の違い
このチュートリアルでは、Pandas の apply()
、map()
、applymap()
メソッドの違いについて説明します。
applymap()
に関連付けられた関数は、与えられた DataFrame のすべての要素に適用されるため、applymap()
メソッドは DataFrame に対してのみ定義されます。同様に、apply()
メソッドに関連付けられた関数は、DataFrame または Series
のすべての要素に適用することができ、したがって、apply()
メソッドは Series と DataFrame の両方のオブジェクトに対して定義されています。map()
メソッドは、Pandas の Series
オブジェクトに対してのみ定義できます。
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print(df, "\n")
出力:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
上の例で表示した DataFrame df
を使って、Pandas の apply()
、map()
、applymap()
メソッドの違いを説明します。
pandas.DataFrame.applymap()
)
構文
DataFrame.applymap(func, na_action=None)
関数 func
を DataFrame
の各要素に適用します。
例:applymap()
メソッドを使用して DataFrame のアイテムを変更する
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
scaled_df = df.applymap(lambda a: a * 10)
print("Scaled DataFrame:")
print(scaled_df, "\n")
出力:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
Scaled DataFrame:
Col 1 Col 2 Col 3
A 300 230 850
B 400 350 870
C 500 650 900
D 600 450 890
データフレーム df
の各要素を乗算し、その結果を scaled_df
データフレームに格納します。関数 applymap()
の引数に lambda
関数を渡すと、入力に 10
を掛けた値が返されます。つまり、DataFrame df
のすべての要素は 10 でスケーリングされます。
for
ループを使って df
DataFrame の各要素を繰り返し処理することもできますが、これではコードが読みにくくなり、面倒で効率的ではありません。しかし、これではコードが読みにくくなり、煩雑になり、効率が悪くなります。
数学演算に加えて、DataFrame の要素に対して他の操作を行うこともできます。
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
altered_df = df.applymap(lambda a: str(a) + ".00")
print("Altered DataFrame:")
print(altered_df, "\n")
出力:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
Altered DataFrame:
Col 1 Col 2 Col 3
A 30.00 23.00 85.00
B 40.00 35.00 87.00
C 50.00 65.00 90.00
D 60.00 45.00 89.00
DataFrame df
の各要素の末尾に .00
を追加します。
Pandas の map()
メソッド
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
df["Col 1"] = df["Col 1"].map(lambda x: x / 100)
print("DataFrame after altering Col 1:")
print(df)
出力:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
DataFrame after altering Col 1:
Col 1 Col 2 Col 3
A 0.3 23 85
B 0.4 35 87
C 0.5 65 90
D 0.6 45 89
DataFrame の特定のカラムに対してのみ map()
メソッドを使用することができます。
Pandas の apply()
メソッド
Pandas で DataFrame 全体を変更する apply()
メソッド
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
altered_df = df.apply(lambda x: x / 100)
print("Altered DataFrame:")
print(altered_df, "\n")
出力:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
Altered DataFrame:
Col 1 Col 2 Col 3
A 0.3 0.23 0.85
B 0.4 0.35 0.87
C 0.5 0.65 0.90
D 0.6 0.45 0.89
Pandas で特定のカラムのみを変更する apply()
メソッド
import pandas as pd
df = pd.DataFrame(
{
"Col 1": [30, 40, 50, 60],
"Col 2": [23, 35, 65, 45],
"Col 3": [85, 87, 90, 89],
},
index=["A", "B", "C", "D"],
)
print("Initial DataFrame:")
print(df, "\n")
df["Col 1"] = df["Col 1"].apply(lambda x: x / 100)
print("DataFrame after altering Col 1:")
print(df)
出力:
Initial DataFrame:
Col 1 Col 2 Col 3
A 30 23 85
B 40 35 87
C 50 65 90
D 60 45 89
DataFrame after altering Col 1:
Col 1 Col 2 Col 3
A 0.3 23 85
B 0.4 35 87
C 0.5 65 90
D 0.6 45 89
したがって、上記の例から、apply()
メソッドを使用して、特定の関数を DataFrame 全体のすべての要素に適用したり、特定のカラムのすべての要素に適用したりすることができます。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn