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() 与位置和关键字参数
让我们看看一个例子,我们将使用args
和kwargs
参数将位置和关键字参数传递给函数。
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