掌握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文档