1. 简介
在Pandas中,apply函数是一种非常强大的函数,可以将一个函数应用于DataFrame中的一行或一列。
2. apply函数的基本用法
apply函数的基本语法如下:
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)
其中,func参数指的是要应用的函数,axis参数指的是要应用的方向(默认为0,即对列应用函数),raw参数指的是是否将行或列作为函数的参数,result_type参数指的是返回值的类型(默认为None,即返回Series),args参数指的是要传递给函数的额外参数,可以使用**kwds参数传递关键字参数。
下面是一个简单的示例,演示了如何使用apply函数计算DataFrame中每行的和:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 创建sum函数
def my_sum(row):
return row.sum()
# 对每行应用sum函数
df.apply(my_sum, axis=1)
结果如下:
0 5
1 7
2 9
dtype: int64
3. apply函数的高级用法
3.1 apply函数与匿名函数
除了使用普通函数,还可以使用匿名函数。下面是一个示例,演示了如何使用匿名函数计算DataFrame中每列的平均值:
# 对每列应用lambda函数
df.apply(lambda col: col.mean(), axis=0)
结果如下:
A 2.0
B 5.0
dtype: float64
3.2 apply函数与函数返回值类型
apply函数可以通过result_type参数指定返回值的类型。下面是一个示例,演示了如何将DataFrame中的每个元素强制转换为字符串:
# 定义to_str函数,并指定返回值类型
def to_str(element):
return str(element)
df.applymap(to_str, result_type='expand')
结果如下:
A B
0 1 4
1 2 5
2 3 6
其中,result_type参数指定了返回值类型为'expand',意思是将每个元素转换为一个独立的Series。
3.3 apply函数与元素访问
apply函数可以通过raw参数指定将行或列作为函数的参数。下面是一个示例,演示了如何计算DataFrame中每个元素的平方:
# 定义square函数,并指定raw参数
def square(element, power):
return element ** power
df.applymap(square, power=2, raw=True)
结果如下:
A B
0 1 16
1 4 25
2 9 36
其中,raw参数指定了将行或列作为函数的参数。
3.4 apply函数与多个参数
如果要使用多个参数,可以使用args参数和**kwds参数。下面是一个示例,演示了如何计算DataFrame中每个元素的N次方:
# 定义pow函数,并指定args参数和**kwds参数
def pow(element, power, *, factor):
return (element ** power) * factor
df.applymap(pow, power=3, factor=temperature, args=(), **{'factor':2})
结果如下:
A B
0 0.000 6.08
1 1.296 7.50
2 4.632 8.64
其中,args参数传递了一个空元组,而**kwds参数通过{'factor':2}传递了一个关键字参数。
3.5 apply函数与Series
apply函数也可以用于Series,其基本语法如下:
Series.apply(func, args=(), **kwds)
下面是一个示例,演示了如何对Series中的每个元素应用函数:
# 创建Series
s = pd.Series([1, 2, 3])
# 定义square函数
def square(element):
return element ** 2
# 对s应用square函数
s.apply(square)
结果如下:
0 1
1 4
2 9
dtype: int64
4. 总结
本文介绍了apply函数的基本用法和高级用法,包括与匿名函数、返回值类型、元素访问、多个参数和Series的用法。apply函数是Pandas中非常强大的函数之一,值得深入学习和掌握。