Series.apply()使用输入对应关系(可以是字典,系列或函数)映射系列的值
调用Series的值函数。可以是ufunc(适用于整个系列的NumPy函数)或仅适用于单个值的Python函数
apply()
似乎它主要完成map()
所做的一切,在应用矢量化操作时对矢量化标量函数进行矢量化。同时map()
允许对空值处理进行一定程度的控制。除了Python的apply()
和map()
函数的历史类比之外,是否有理由在一般情况下优先选择其中一个?为什么这些功能不能合并?
答案 0 :(得分:2)
差别很小:
pandas.Series.map
将用您传递到map
中的值替代系列的值。
pandas.Series.apply
将对系列的值应用函数(可能带有参数)。
区别在于您可以传递给方法
map
和apply
都可以接收功能:s = pd.Series([1, 2, 3, 4])
def square(x):
return x**2
s.map(square)
0 1
1 2
2 3
3 4
dtype: int64
s.apply(square)
0 1
1 2
2 3
3 4
dtype: int64
map
的函数不能有多个参数(它将输出一个ValueError
):def power(x, p):
return x**p
s.apply(power, p=3)
0 1
1 8
2 27
3 64
dtype: int64
s.map(power,3)
---------------------------------------------------------------------------
ValueError
map
可以接收字典(甚至是pd.Series
,在这种情况下,它将使用索引作为键),而apply
则不能(将输出TypeError
) dic = {1: 5, 2: 4}
s.map(dic)
0 5.0
1 4.0
2 NaN
3 NaN
dtype: float64
s.apply(dic)
---------------------------------------------------------------------------
TypeError
s.map(s)
0 2.0
1 3.0
2 4.0
3 NaN
dtype: float64
s.apply(s)
---------------------------------------------------------------------------
TypeError