Python Pandas - 函数应用
要将您自己或其他库的函数应用于 Pandas 对象,您应该了解三个重要方法。 下面讨论了这些方法。 使用的适当方法取决于您的函数是否希望在整个 DataFrame、行或列或元素方面进行操作。
- 表函数应用:pipe()
- 行或列函数应用:apply()
- 逐元素函数应用:applymap()
逐表函数应用
可以通过传递函数和适当数量的参数作为管道参数来执行自定义操作。 从而对整个DataFrame进行操作。
例如,将值 2 添加到 DataFrame 中的所有元素。 那么,
加法函数
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.apply(np.mean)
它的输出如下 −
col1 col2 col3 0 2.176704 2.219691 1.509360 1 2.222378 2.422167 3.953921 2 2.241096 1.135424 2.696432 3 2.355763 0.376672 1.182570 4 2.308743 2.714767 2.130288
按行或按列的函数应用
可以使用 apply() 方法沿 DataFrame 或 Panel 的轴应用任意函数,该方法与描述性统计方法一样,采用可选的轴参数。 默认情况下,该操作按列执行,将每一列视为类似数组。
示例 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.apply(np.mean)
它的输出如下 −
col1 -0.288022 col2 1.044839 col3 -0.187009 dtype: float64
通过传递 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.apply(np.mean)
它的输出如下 −
col1 0.034093 col2 -0.152672 col3 -0.229728 dtype: float64
示例 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.apply(np.mean)
它的输出如下 −
col1 -0.167413 col2 -0.370495 col3 -0.707631 dtype: float64
元素智能函数应用
并非所有函数都可以向量化(既不是返回另一个数组的 NumPy 数组也不是任何值),DataFrame 上的方法 applymap() 和类似地 map() 上的方法 Series 接受任何接受单个值并返回单个值的 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.apply(np.mean)
它的输出如下 −
col1 0.480742 col2 0.454185 col3 0.266563 dtype: float64
示例 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.apply(np.mean)
它的输出如下 −
col1 0.395263 col2 0.204418 col3 -0.795188 dtype: float64