文章目录
- 1. Series的apply方法
- 2. DataFrame的apply方法
- 2.1 针对列使用apply
- 2.2 针对行使用apply
- Pandas提供了很多数据处理的API,但当提供的API不能满足需求的时候,需要自己编写数据处理函数, 这个时候可以使用apply函数
- apply函数可以接收一个自定义函数, 可以将DataFrame的行/列数据传递给自定义函数处理 apply函数类似于编写一个for循环,
- 遍历行/列的每一个元素,但比使用for循环效率高很多
1. Series的apply方法
单个参数的apply自定义函数使用方法:
import pandas as pd
# 1. 数据准备
df = pd.DataFrame({'a':[10,20,30],'b':[20,30,40]
})
# 2. 函数定义
def my_sq(x):'''求平方'''return x**2
# 3. 调用apply并传入函数对象
sq = df['a'].apply(my_sq)'''
0 100
1 400
2 900
Name: a, dtype: int64
'''
多个参数的apply自定义函数使用方法:
# 1. 定义一个函数,包含两个参数
def my_exp(x,e):return x**e
# 2. 使用apply调用函数,并使用键值对的方式传入参数
ex = df['a'].apply(my_exp,e=2)
2. DataFrame的apply方法
DataFrame的apply自定义函数和Series自定义行数使用方法并无明显区别,但是,二者的工作原理不同。
# df和my_sq在上文定义
df.apply(my_sq)
'''a b
0 100 400
1 400 900
2 900 1600
'''
Series的apply自定义方法是针对每个元素调用函数,
而DataFrame的apply自定义方法是针对DF的行或者列调用函数,具体是针对行还是针对列,要取决于传入的参数。
apply函数有axis参数,当
- axis=0(默认值)时,默认针对每一列调用自定义函数
- axis=1时,针对每一行调用自定义函数
2.1 针对列使用apply
def avg_3_apply(col):x = col[0]y = col[1]z = col[2]return (x+y+z)/3# axis = 0 是默认的,不需要传参
df.apply(avg_3_apply)'''
a 20.0
b 30.0
dtype: float64
'''
2.2 针对行使用apply
def avg_2_apply(row):x = row[0]y = row[1]return (x + y) / 2df.apply(avg_2_apply, axis=1)'''
0 15.0
1 25.0
2 35.0
dtype: float64
'''