Python Pandas 函数应用


要将你自己或其他库的函数应用于 Pandas 对象,你应该了解三个重要的方法。下面讨论了这些方法。要使用的适当方法取决于你的函数是希望在整个 DataFrame 上按行、按列还是按元素操作。

  • Table wise 函数应用:pipe()
  • 行或列智能函数应用程序:apply()
  • 元素明智的函数应用程序:applymap()

Table-wise 函数应用


可以通过将函数和适当数量的参数作为管道参数传递来执行自定义操作。因此,操作是在整个 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() 方法,与描述性统计方法一样,采用可选的轴参数。默认情况下,该操作按列执行,将每一列视为类似数组。

示例 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 和 类似地 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