我自己对于apply方法的理解是:其最重要的参数是传入的函数,传入的函数会对DataFrame的每一行(index)或每一列(column)进行操作,然后返回每一个index或column对应的值,再将这些行(或者列)以及其对应的返回值重新组合成一个DataFrame的对象,然后作为整个apply方法的返回值返回。
至于传入的函数具体是对每一行还是每一列进行操作,取决于apply传入的axis参数,默认axis=0,表示对每一列进行操作,axis=1,表示对每一行进行操作。因此apply方法最重要两个参数是传入的函数func和axis。
[python] view plain copy
#函数应用和映射
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon'])
print(df)
b d e
utah -0.451195 -0.183451 -0.297182
ohio 0.443792 0.925751 -1.320857
texas 1.039534 -0.927392 0.611482
oregon 0.938760 1.265244 0.313582
[python] view plain copy
#将函数应用到由各列或行形成的一维数组上。DataFrame的apply方法可以实现此功能
f=lambda x:x.max()-x.min()
#默认情况下会以列为单位,分别对列应用函数
t1=df.apply(f)
print(t1)
t2=df.apply(f,axis=1)
print(t2)
b 1.490729
d 2.192636
e 1.932339
dtype: float64
utah 0.267744
ohio 2.246608
texas 1.966925
oregon 0.951662
dtype: float64
[python] view plain copy
#除标量外,传递给apply的函数还可以返回由多个值组成的Series
def f(x):
return pd.Series([x.min(),x.max()],index=['min','max'])
t3=df.apply(f)
#从运行的结果可以看出,按列调用的顺序,调用函数运行的结果在右边依次追加
print(t3)
b d e
min -0.451195 -0.927392 -1.320857
max 1.039534 1.265244 0.611482
[python] view plain copy
#元素级的python函数,将函数应用到每一个元素
#将DataFrame中的各个浮点值保留两位小数
f=lambda x: '%.2f'%x
t3=df.applymap(f)
print(t3)
b d e
utah -0.45 -0.18 -0.30
ohio 0.44 0.93 -1.32
texas 1.04 -0.93 0.61
oregon 0.94 1.27 0.31
[python] view plain copy
#注意,这里之所以叫applymap,是因为Series有一个永远元素级函数的map方法
t4=df['e'].map(f)
print(t4)
utah -0.30
ohio -1.32
texas 0.61
oregon 0.31
Name: e, dtype: object