Pandas 函数应用,要将自定义或其他库的函数应用于Pandas对象,有三个重要的方法,下面来讨论如何使用这些方法。
使用适当的方法取决于函数是否期望在整个DataFrame
行或列或元素上进行操作。
类型 | 函数 | 说明 |
---|---|---|
表式函数应用 | pipe() |
可以通过将函数和适当数量的参数作为管道参数来执行自定义操作,从而对整个DataFrame 执行操作。 |
行列函数应用 | apply() |
沿DataFrame 或Panel 的轴应用任意函数,它与描述性统计方法一样,apply()方法使用一个可选的axis参数。 |
元素函数应用 | applymap() |
和Series上的map() 类似,接受任何Python 函数,该函数要求能够接受单个值并返回单个值。 |
表式函数应用
可以通过将函数和适当数量的参数作为管道参数来执行自定义操作,从而对整个DataFrame
执行操作。
例如,为DataFrame
中的所有元素加上一个值2
。
adder 函数
adder
函数将两个数值作为参数相加并返回总和。
def adder(ele1,ele2):
return ele1+ele2
我们现在将使用自定义函数在DataFrame
上执行操作
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
参考示例代码如下:
import pandas as pd
import numpy as np
def adder(ele1,ele2):
return ele1+ele2
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
print (df)
执行结果如下:
col1 col2 col3
0 -0.107034 0.621318 -0.315472
1 -1.674204 -0.456079 -0.239473
2 0.639198 0.067203 0.149201
3 -1.198951 0.274950 -0.045467
4 -1.363214 0.118386 1.657471
行或列函数应用
可以使用apply()
方法沿DataFrame
或Panel
的轴应用任意函数,它与描述性统计方法一样,apply()
方法使用一个可选的axis
参数。
默认情况下,操作按列执行,该操作按列执行,将每一列作为类似数组的列。
示例1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
print (df)
执行结果如下:
col1 col2 col3
0 1.099413 0.490379 -0.728655
1 -0.176489 0.399474 -1.667792
2 1.101385 -0.695297 -0.592555
3 0.868841 0.384286 0.251040
4 -0.446380 1.595689 0.583893
示例2:通过传递axis
参数,可以在行上执行操作。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean,axis=1)
print (df)
执行结果如下:
col1 col2 col3
0 -0.049716 1.442411 -0.044421
1 1.010427 0.341281 1.750932
2 1.790768 0.635563 0.327642
3 -0.861768 2.845562 -1.065606
4 -0.708383 -0.312307 0.547411
示例3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(lambda x: x.max() - x.min())
print (df)
执行结果如下:
col1 col2 col3
0 -0.243943 -0.751319 -1.255694
1 -0.335897 -1.012726 -1.392696
2 -0.707799 -0.156924 0.194075
3 1.040613 -0.436822 1.045816
4 0.171972 0.606404 -1.982560
元素函数应用
并不是所有的函数都可以向量化(既不返回另一个数组也不返回任何值的NumPy数组),在DataFrame
上的方法applymap()
和Series上的map()
类似,接受任何Python函数,该python函数要求能够接受单个值并返回单个值。
示例1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
# My custom function
df['col1'].map(lambda x:x*100)
print (df)
执行结果如下:
col1 col2 col3
0 -0.700311 -0.800143 -1.056121
1 1.129104 -0.339303 -0.956953
2 -0.032603 0.478423 0.100833
3 -0.517502 0.036195 -0.310516
4 0.634135 0.024519 -1.295711
示例2
import pandas as pd
import numpy as np
# My custom function
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*100)
print (df)
执行结果如下:
col1 col2 col3
0 -1.043203 -1.996480 0.058107
1 -1.298987 0.446834 0.394456
2 -1.585770 1.156161 -1.216770
3 -1.083919 -1.492321 0.966901
4 0.059858 -0.554857 0.464283