python pandas.map apply applymap 三种方法小结

pandas包的apply方法表示对DataFrame中的每一列元素应用函数。比如:

python pandas.map apply applymap 三种方法小结_第1张图片

同时也可以在行方向做运算:

python pandas.map apply applymap 三种方法小结_第2张图片

map方法:这里的map方法有点像mapreduce中的map()方法,具体的过程是将数据集中的每一个元素进行函数处理,如下:

df['a']
Out[17]: 
aber    0.320930
tom     1.311012
jack   -2.008876
toms   -2.282446
Name: a, dtype: float64

add = lambda x:x+1

df['a'].map(add)
Out[19]: 
aber    1.320930
tom     2.311012
jack   -1.008876
toms   -1.282446
Name: a, dtype: float64

既然有map() 我们不妨看一看有没有reduce(),他的效果又是怎样的:reduce:

reduceData = df['a'].reduce(add)

报错:'Series' object has no attribute 'reduce'

再次尝试:


df['a']
Out[17]: 
aber    0.320930
tom     1.311012
jack   -2.008876
toms   -2.282446
Name: a, dtype: float64

f = lambda x,y:x+y

reduceData = functools.reduce(f,df['a'])

reduceData
Out[28]: -2.659379404636298

可以得到,reduce在pandas中没有,在functools包中,主要的操作过程是:

X     Y

1     2

3     3

6     4

10   5

这样计算的,上面的过程是 f = lambdas x,y  :x+y 的过程

 最后一个applymap的用法:

format = lambda x:'%.2f'%x

df.applymap(format)
Out[32]: 
          a      b      c      d      e
aber   0.32  -0.62  -0.10  -0.89  -0.65
tom    1.31  -1.96   0.63  -0.82  -0.88
jack  -2.01  -1.21  -1.74   0.43   0.40
toms  -2.28   1.30   0.34  -1.15   0.44

可以得出:map是以行或者列为单位,series的角度下进行操作,或加或减等等只影响一部分数据

                 apply是以行或者列为单位在dataframe的角度下对行或列的范围里进行操作,默认为列,

                applymap是对整个dataframe不论行或者列进行操作。

                reduce是在functools包中的一个简单的聚合函数

 

最后有一个小实验:

已知:f = lambda x:x.max()-x.min()

add = lambda x:x+1

f = lambda x,y:x+y

format = lambda x:'%.2f'%x

df.applymap(add) 正常,为数据框的值加1,

df.apply(add) 正常,为数据框的值加1,

apply(format)  不正常,程序报错

df.applymap(f) 不正常

到底是为什么,留下来再试

 

 

 

你可能感兴趣的:(python pandas.map apply applymap 三种方法小结)