1、apply方法
apply函数可以接收一个自定义函数, 可以将DataFrame的行/列数据传递给自定义函数处理
1.1、Series的apply方法
1、apply方法有一个func参数, 把传入的函数应用于Series的每个元素
import pandas as pd
df = pd.DataFrame({'a': [10,20,30], 'b': [20,30,40]})
def my_sql(x):
return x**2
sq = df['a'].apply(my_sql)
print(sq)
#0 100
#1 400
#2 900
#Name: a, dtype: int64
2、apply 传入 需要多个参数的函数
# 参数 x, e
def my_exp(x, e):
return x**e
ex = df['a'].apply(my_exp, e=2)
print(ex)
1.2、DataFrame的apply方法
1、使用方法
axis 0(默认)按列处理,1按行处理
# DataFrame的整体数据,my_sql为前面的函数
df.apply(my_sql, axis=0)
# a b
#0 100 400
#1 400 900
#2 900 1600
def avg_3_appy(col):
x = col[0]
y = col[1]
z = col[2]
return (x + y + z)/3
df.apply(avg_3_appy)
#a 20.0
#b 30.0
#dtype: float64
2、向量化函数
1、使用np.vectorize将函数向量化
def avg_2_mod(x, y):
if(x == 20):
return (np.NaN)
else:
return (x + y) / 2
import numpy as np
avg_2_mod_vec = np.vectorize(avg_2_mod)
avg_2_mod_vec(df['a'], df['b'])
# array([15., nan, 35.])
2、装饰器使用
@np.vectorize
def avg_2_mod2(x, y):
if(x == 20):
return (np.NaN)
else:
return (x + y) / 2
avg_2_mod2(df['a'], df['b'])
# array([15., nan, 35.])