Python Pandas Series.apply()和Series.map()之间有什么区别? :

Python Pandas Series.apply()和Series.map()之间有什么区别? :,python,numpy,vectorization,Python,Numpy,Vectorization,使用输入对应关系映射序列值(可以是dict、序列或函数) 对系列的值调用函数。可以是ufunc(一个应用于整个系列的NumPy函数)或只对单个值起作用的Python函数 apply()。同时,map()允许对空值处理进行一定程度的控制。除了历史上类似于Python的apply()和map()函数之外,在一般使用中,是否有理由选择其中一个函数?为什么不将这些功能组合起来?差别很微妙: pandas.Series.map将用传递到map中的内容替换序列的值 pandas.Series.apply将对

使用输入对应关系映射序列值(可以是dict、序列或函数)

对系列的值调用函数。可以是ufunc(一个应用于整个系列的NumPy函数)或只对单个值起作用的Python函数


apply()。同时,
map()
允许对空值处理进行一定程度的控制。除了历史上类似于Python的
apply()
map()
函数之外,在一般使用中,是否有理由选择其中一个函数?为什么不将这些功能组合起来?

差别很微妙:

pandas.Series.map
将用传递到
map
中的内容替换序列的值

pandas.Series.apply
将对序列的值应用函数(可能带有参数)

区别在于可以传递给方法的内容

  • map
    apply
    都可以接收以下功能:
s=pd.系列([1,2,3,4])
def方形(x):
返回x**2
s、 地图(广场)
0    1
1    2
2    3
3    4
数据类型:int64
s、 应用(方形)
0    1
1    2
2    3
3    4
数据类型:int64
  • 但是,传递到
    map
    的函数不能有多个参数(它将输出
    ValueError
    ):
def电源(x,p):
返回x**p
s、 应用(功率,p=3)
0     1
1     8
2    27
3    64
数据类型:int64
s、 地图(电源,3)
---------------------------------------------------------------------------
数值误差
  • map
    可以接收字典(甚至是
    pd.Series
    ,在这种情况下,它将使用索引作为键),而
    apply
    不能(它将输出
    TypeError
dic={1:5,2:4}
s、 地图(dic)
0    5.0
1    4.0
2楠
3南
数据类型:64
s、 申请(dic)
---------------------------------------------------------------------------
打字错误
s、 地图(s)
0    2.0
1    3.0
2    4.0
3南
数据类型:64
s、 申请
---------------------------------------------------------------------------
打字错误

afaik Series.map(func)无法将其他参数传递给func。当使用Series.apply(func)时,可以执行sr.apply(func,convert_dtype=True,arg2='foo',arg3=True),Series.apply()无法识别的任何关键字参数都将传递给func,在这种情况下,arg2='foo'和arg3=True。@xg.plt.py另一个问题的上下文是数据帧,而不是Series对象(因此,这种情况下的相似性更为深刻)