apply()
函数:最通用的函数,适用于各种情况,包括聚合和自定义转换
apply()
函数是最通用的,可以应用于整个 DataFrame、DataFrame 的列或行、或者 Series。它接受一个函数作为参数,并将这个函数应用到指定的轴(axis)上。
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['a', 'b', 'c']
})
# 定义一个函数,将每个元素加 1
def add_one(x):
return x + 1
# 定义一个函数,将字符串转换为大写
def to_uppercase(x):
return x.upper()
# 使用 apply() 函数对每一列应用不同的函数
df = df.apply({
'A': add_one,
'B': to_uppercase
})
print(df)
'''
A B
0 2 A
1 3 B
2 4 C
'''
map()
函数:适用于简单的元素级转换,特别是针对 Series
map()
函数专门用于 Series,它接受一个函数或一个映射关系,并将这个函数或映射关系应用到 Series 的每一个元素上。map()
返回一个新的 Series,其中的元素是原 Series 经过函数处理后的结果。
虽然map()
函数在 Pandas 中主要是为 Series 设计的,它也可以用于 DataFrame,但通常是对 DataFrame 的某一列或某几列应用,而不是对整个 DataFrame 应用。当对 DataFrame 使用 map()
时,实际上是对 DataFrame 中的每一列分别应用 map()
函数。
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['a', 'b', 'c']
})
def add_one(x):
return x + 1
# map() 不能直接应用于整个 DataFrame,但可以应用于某一列
df['A'] = df['A'].map(add_one)
print(df)
'''
A B
0 2 a
1 3 b
2 4 c
'''
transform()
函数:用于保持原始 DataFrame 结构的元素级转换
transform()
函数类似于 apply()
,但总是返回一个与原始 DataFrame 或 Series 相同形状的 DataFrame 或 Series。即使只对一列或一行应用函数,transform()
也会返回一个完整的 DataFrame 或 Series。
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
def add_one(x):
return x + 1
# 使用 transform() 函数对 DataFrame 的每个元素加 1
df = df.transform(add_one)
# 注意:如果df中有元素无法应用add_one(),如字符串元素,此处会报错
print(df)
'''
A B
0 2 5
1 3 6
2 4 7
'''
区别:
- 应用对象:
apply()
可以应用于整个 DataFrame、列或行;map()
专门应用于 Series;transform()
也适用于 DataFrame,但通常用于列级别的操作。 - 返回值:
apply()
根据函数的返回值可能返回 Series 或 DataFrame;map()
总是返回 Series;transform()
总是返回与原始对象形状相同的 DataFrame 或 Series。 - 用途:
apply()
最通用,适用于各种情况;map()
适用于简单的元素级别映射;transform()
适用于保持原始形状的同时进行元素级别转换的情况。