【Pandas】Apply自定义行数

文章目录

    • 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) / 2


df.apply(avg_2_apply, axis=1)

'''
0    15.0
1    25.0
2    35.0
dtype: float64
'''

你可能感兴趣的:(人工智能,pandas,python,开发语言,apply)