>>> from env_helper import info; info()
待更新
5.7. Pandas函数应用¶
要将自定义或其他库的函数应用于Pandas对象,有三个重要的方法,下面来讨论如何使用这些方法。使用适当的方法取决于函数是否期望在整个DataFrame,行或列或元素上进行操作。
表合理函数应用:pipe()
行或列函数应用:apply()
元素函数应用:applymap()
表格函数应用¶
可以通过将函数和适当数量的参数作为管道参数来执行自定义操作。 因此,对整个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.208437 0.298524 -0.902519
1 1.304937 1.433761 -0.789089
2 -1.146424 0.495104 -0.482684
3 -1.307434 -1.632128 -0.042929
4 -0.630547 -1.124569 0.014740
行或列合理函数应用¶
可以使用apply()方法沿DataFrame或Panel的轴应用任意函数,它与描述性统计方法一样,采用可选的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)
>>> print(df)
col1 col2 col3
0 -0.001566 -0.323715 0.281728
1 0.629556 0.574423 -1.997629
2 -0.233508 0.724304 2.063719
3 -0.776899 2.424228 0.929563
4 0.006696 -0.427313 1.448494
通过传递axis参数,可以在行上执行操作。
示例-2¶
>>> 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 1.885521 -0.581022 1.732570
1 -0.154360 -1.342056 -0.187386
2 -1.427500 0.092267 1.331077
3 0.674246 -0.473314 0.156390
4 -0.703407 0.248118 0.234135
示例-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.365561 -0.207657 0.596434
1 -0.156572 0.777278 0.055926
2 -0.372297 1.248989 0.088700
3 0.507658 -0.640586 -0.917948
4 0.051933 -1.280586 -0.645598
元素合理函数应用¶
并不是所有的函数都可以向量化(也不是返回另一个数组的NumPy数组,也不是任何值),在DataFrame上的方法applymap()和类似于在Series上的map()接受任何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 -1.173950 -0.044773 -0.495571
1 1.584731 -0.031140 0.701249
2 -0.610611 0.226078 1.148624
3 -0.315578 0.261744 -0.617087
4 -0.813268 0.145595 -0.229687
示例-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 -0.564091 0.204989 1.008012
1 -0.855999 -0.720598 -0.426536
2 -1.404017 -1.136245 1.432589
3 0.658555 -0.988077 -2.085771
4 1.655409 0.044457 -1.107277