22、apply自定义函数

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.])
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容