1. 程式人生 > >python pandas.map apply applymap 三種方法小結

python pandas.map apply applymap 三種方法小結

pandas包的apply方法表示對DataFrame中的每一列元素應用函式。比如:

同時也可以在行方向做運算:

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) 不正常

到底是為什麼,留下來再試