掌握Pandas DataFrame apply()方法:10个实用示例详解

这是文章《Pandas DataFrame 的 apply() 示例》的第1部分(共1部分)。

Pandas DataFrame的apply()函数用于沿DataFrame的轴应用函数。函数的语法是:

def apply(
    self,
    func,
    axis=0,
    broadcast=None,
    raw=False,
    reduce=None,
    result_type=None,
    args=(),
    **kwds
)

重要的参数有:

  • func:要应用于DataFrame的每一行或每一列的函数。
  • axis:应用函数的轴。可能的值为{0或’index’,1或’columns’},默认为0。
  • args:传递给函数的位置参数。当我们需要向函数传递额外参数时,这很有用。
  • kwargs:传递给函数的额外关键字参数。当我们需要向函数传递额外关键字参数时,这很有用。

Pandas DataFrame apply() 示例

让我们来看看在DataFrame对象上使用apply()函数的一些例子。

将函数应用于DataFrame元素

import pandas as pd

df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})


def square(x):
    return x * x


df1 = df.apply(square)

print(df)
print(df1)

输出结果:

   A   B
0  1  10
1  2  20

   A    B
0  1  100
1  4  400

调用apply()函数的DataFrame保持不变。apply()函数在将函数应用于其元素后返回一个新的DataFrame对象。

使用lambda函数进行apply操作

如果您看一下上面的示例,我们的square()函数非常简单。我们可以将其轻松转换为lambda函数。我们可以在调用apply()函数时创建一个lambda函数。

df1 = df.apply(lambda x: x * x)

输出结果将与上一个示例相同。

沿着轴应用函数

我们可以沿着轴应用一个函数。但是,在最后一个例子中,并没有使用轴。该函数被应用于DataFrame的所有元素。当我们对DataFrame的行或列调用聚合函数时,轴的使用变得明确起来。比如说,我们想要获得沿着列或索引的元素的和。根据轴参数的值,输出将会有所不同。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})

df1 = df.apply(np.sum, axis=0)
print(df1)

df1 = df.apply(np.sum, axis=1)
print(df1)

输出:

A     3
B    30
dtype: int64

0    11
1    22
dtype: int64

在第一个例子中,计算的是列上元素的总和。而在第二个例子中,计算的是行上元素的总和。

带有参数的DataFrame apply()

假设我们想要应用一个可以接受多个参数的函数。在这种情况下,我们可以使用’args’参数来传递额外的参数。

import pandas as pd


def sum(x, y, z):
    return x + y + z


df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})

df1 = df.apply(sum, args=(1, 2))
print(df1)

输出:

   A   B
0  4  13
1  5  23

带有位置参数和关键字参数的DataFrame apply()函数

让我们看一个例子,在这个例子中,我们将同时使用’args’和’kwargs’参数将位置参数和关键字参数传递给函数。

import pandas as pd


def sum(x, y, z, m):
    return (x + y + z) * m


df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})

df1 = df.apply(sum, args=(1, 2), m=10)
print(df1)

输出结果:

    A    B
0  40  130
1  50  230

DataFrame的applymap()函数

如果您想对每个元素逐个应用函数,可以使用applymap()函数。该函数不需要额外的参数。该函数将应用于每个元素,并使用返回值创建结果DataFrame对象。

import pandas as pd
import math

df = pd.DataFrame({'A': [1, 4], 'B': [100, 400]})
df1 = df.applymap(math.sqrt)

print(df)
print(df1)

输出:

   A    B
0  1  100
1  4  400
     A     B
0  1.0  10.0
1  2.0  20.0

让我们看一个使用applymap()函数将所有元素的值转换为大写的示例。

import pandas as pd

df = pd.DataFrame({'Name': ['Pankaj', 'Meghna'], 'Role': ['ceo', 'cto']})

df1 = df.applymap(str.upper)

print(df)
print(df1)

输出:

     Name Role
0  Pankaj  ceo
1  Meghna  cto

     Name Role
0  PANKAJ  CEO
1  MEGHNA  CTO

参考资料

  • Python Pandas模块教程
  • Pandas apply() API文档
bannerAds