将自定义或者其他第三方函数应用于Pandas对象,有三个方法:
pipe()
apply()
applymap()
以如下DataFrame作为例子:
col1 col2 col3
0 -0.484512 1.185299 -0.994175
1 0.953891 0.040472 0.336415
2 -0.264222 0.395222 0.620222
3 1.068480 0.747379 0.781686
4 1.337689 0.068951 0.258189
通过将函数和适量参数作为pipe()的参数来执行自定义操作,对整个DataFrame有效。 例如,一下代码将DataFrame所有元素加2:
def adder(ele1, ele2):
return ele1 + ele2
df.pipe(adder, 2)
结果:
col1 col2 col3
0 1.515488 3.185299 1.005825
1 2.953891 2.040472 2.336415
2 1.735778 2.395222 2.620222
3 3.068480 2.747379 2.781686
4 3.337689 2.068951 2.258189
用apply()方法沿DataFrame或Panel的轴应用函数。可选的axis参数作为行或列的标志。默认按列执行,每列列为数组。 以下代码求每列的均值(默认):
df.apply(np.mean)
结果:
col1 0.522265
col2 0.487465
col3 0.200468
dtype: float64
通过axis参数,求每行的均值:
df.apply(np.mean,axis=1)
结果:
0 -0.097796
1 0.443593
2 0.250407
3 0.865849
4 0.554943
dtype: float64
可以用lambda表达式 以下代码求最大值和最小值的差:
df.apply(lambda x: x.max() - x.min())
结果:
col1 1.822201
col2 1.144827
col3 1.775861
dtype: float64
Dataframe上的applymap()
方法类似在Series上的map()
方法,接受python函数,返回单个值。
用map()
将第一列扩大一百倍:
df["col1"].map(lambda x:x*100)
结果:
0 -48.451157
1 95.389111
2 -26.422239
3 106.848018
4 133.768933
Name: col1, dtype: float64
将DataFrame中的元素全部扩大一百倍:
df.applymap(lambda x: x* 100)
结果:
col1 col2 col3
0 -48.451157 118.529903 -99.417538
1 95.389111 4.047239 33.641550
2 -26.422239 39.522219 62.022228
3 106.848018 74.737950 78.168611
4 133.768933 6.895073 25.818906