Pandas DataFrame apply() 示例

Pandas DataFrame apply() 函数用于在 DataFrame 的一个轴上应用函数,函数语法是:

 1def apply(
 2    self,
 3    func,
 4    axis=0,
 5    broadcast=None,
 6    raw=False,
 7    reduce=None,
 8    result_type=None,
 9    args=(),
10    **kwds
11)

重要参数是:

  • func:该函数适用于数据框的每个行或列
  • :函数被应用的轴。可能的值为 {0 或 'index', 1 或 'columns'},默认值为 0.
  • args:传递到函数的位置参数。当我们必须传递到函数的额外参数时,这很有帮助 kwargs:传递到函数的额外关键字参数。

Pandas DataFrame 应用() 示例

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

1. 将函数应用于 DataFrame 元素

 1import pandas as pd
 2
 3df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})
 4
 5def square(x):
 6    return x * x
 7
 8df1 = df.apply(square)
 9
10print(df)
11print(df1)

输出:

1A B
20 1 10
31 2 20
4
5   A B
60 1 100
71 4 400

在应用() 函数被称为的 DataFrame 仍然保持不变.应用() 函数在将该函数应用到其元素后返回一个新的 DataFrame 对象。

使用 lambda 应用()

如果你看上面的例子,我们的 square() 函数非常简单,我们可以很容易地将其转换为 lambda 函数,我们可以通过调用 apply() 函数来创建 lambda 函数。

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

结果将与最后一个例子保持相同。

应用() 沿轴

我们可以沿轴应用一个函数,但在最后一个例子中,没有使用轴。该函数正在应用于DataFrame的所有元素。当我们在DataFrame行或列上调用汇总函数时,轴的使用变得清晰。

 1import pandas as pd
 2import numpy as np
 3
 4df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})
 5
 6df1 = df.apply(np.sum, axis=0)
 7print(df1)
 8
 9df1 = df.apply(np.sum, axis=1)
10print(df1)

输出:

1A 3
2B 30
3dtype: int64
4
50 11
61 22
7dtype: int64

在第一个示例中,计算了沿列的元素的总和,而在第二个示例中,计算了沿行的元素的总和。

DataFrame 应用() 与参数

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

1import pandas as pd
2
3def sum(x, y, z):
4    return x + y + z
5
6df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})
7
8df1 = df.apply(sum, args=(1, 2))
9print(df1)

输出:

1A B
20 4 13
31 5 23

5. DataFrame apply() 与位置和关键字参数

让我们看看一个例子,我们将使用argskwargs参数将位置和关键字参数传递给函数。

1import pandas as pd
2
3def sum(x, y, z, m):
4    return (x + y + z) * m
5
6df = pd.DataFrame({'A': [1, 2], 'B': [10, 20]})
7
8df1 = df.apply(sum, args=(1, 2), m=10)
9print(df1)

输出:

1A B
20 40 130
31 50 230

数据框 应用程序() 函数

如果要将函数应用于元素方式,可以使用 applymap() 函数. 此函数没有额外的参数. 该函数应用于每个元素,返回的值用于创建结果的 DataFrame 对象。

1import pandas as pd
2import math
3
4df = pd.DataFrame({'A': [1, 4], 'B': [100, 400]})
5df1 = df.applymap(math.sqrt)
6
7print(df)
8print(df1)

输出:

1A B
20 1 100
31 4 400
4     A B
50 1.0 10.0
61 2.0 20.0

让我们看看另一个例子,我们将使用 applymap() 函数将所有元素值转换为 uppercase。

1import pandas as pd
2
3df = pd.DataFrame({'Name': ['Pankaj', 'Meghna'], 'Role': ['ceo', 'cto']})
4
5df1 = df.applymap(str.upper)
6
7print(df)
8print(df1)

输出:

1Name Role
20 Pankaj ceo
31 Meghna cto
4
5     Name Role
60 PANKAJ CEO
71 MEGHNA CTO

参考

Published At
Categories with 技术
Tagged with
comments powered by Disqus