You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pandas Series操作作为参数传入自定义函数

问题解决

核心错误原因

  • 变量名大小写不匹配:函数参数定义为series,但函数内部错误使用大写开头的Series调用,属于变量名拼写错误
  • 方法调用逻辑错误:不能直接用df[col].func的语法调用传入的方法参数,需要先获取Series对应的方法对象再执行
  • 传参格式错误:调用时写的mean()属于直接执行函数,当前作用域没有独立定义mean函数所以触发NameError,就算有对应函数,也会把执行结果而非函数本身传入自定义函数

实现方案

方案1:传入方法名字符串(推荐,适配pandas Series原生方法)

自定义函数通过getattr动态获取Series的对应方法执行:

import numpy as np
import pandas as pd

def get_info(df, series_col, func_name):
    target_series = df[series_col]
    # 动态获取Series的对应方法
    method = getattr(target_series, func_name)
    # 执行方法并返回结果
    return method()

# 测试数据
data = np.random.randint(10, size=(3, 4))
df = pd.DataFrame(data, columns=['a', 'b', 'c', 'd'])
# 示例调用,求d列均值
mn = get_info(df, 'd', 'mean')
print(mn)

如果方法需要传参,比如求指定分位数,可调整函数支持参数透传:

def get_info(df, series_col, func_name, *args, **kwargs):
    target_series = df[series_col]
    method = getattr(target_series, func_name)
    return method(*args, **kwargs)

# 调用示例:求d列的25%分位数
q25 = get_info(df, 'd', 'quantile', q=0.25)

方案2:传入可调用对象(适配numpy函数/自定义函数)

如果需要传入numpy运算函数或者自定义运算逻辑,可使用该方案:

def get_info(df, series_col, func):
    target_series = df[series_col]
    return func(target_series)

# 调用示例,传入numpy的mean方法
mn = get_info(df, 'd', np.mean)
# 也支持传入自定义函数,比如求最大值减最小值
range_calc = lambda x: x.max() - x.min()
d_range = get_info(df, 'd', range_calc)

内容的提问来源于stack exchange,提问作者RickRyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:24:02