Pandas apply, map 和 applymap 的区别
本教程解释了 Pandas 中 apply()
、map()
和 applymap()
方法之间的区别。
与 applymap()
相关联的函数被应用于给定的 DataFrame 的所有元素,因此 applymap()
方法只针对 DataFrames 定义。同样,与 apply()
方法相关联的函数可以应用于 DataFrame 或 Series
的所有元素,因此 apply()
方法是为 Series 和 DataFrame 对象定义的。Pandas 中的 map()
方法只能为 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
DataFrame 中的每个元素相乘,并将结果存储在 scaled_df
DataFrame 中。我们将一个 lambda
函数作为参数传递给 applymap()
函数,该函数通过将输入值与 10
相乘返回一个值。所以 DataFrame df
中的每一个元素都会被缩放为 10。
我们也可以使用 for
循环来迭代 df
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")
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()
方法
apply()
方法改变 Pandas 中的整个 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.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
apply()
方法在 Pandas 中只修改某一列
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