Python/Pandas:在用户定义函数中使用内置函数作为参数

2021-05-16 08:44:29 发布

您现在位置:Python中文网/ 问答频道 /正文

非常简单的查询,但似乎找不到合适的答案。我想把Pandas方法作为输入传递给我的函数,例如.sum()。你知道吗

def something(dataframe,col_name,func):
    return dataframe.col_name.func

something(df,'a',sum())

TypeError:sum至少需要1个参数,但得到0。你知道吗

Python将其与内置函数sum()混淆

2条回答
网友
1楼 ·

您可以使用operator.methodcaller来:

from operator import methodcaller

df = pd.DataFrame({'a': range(11)})

def foo(df, col, method):
    return methodcaller(method)(df[col])

res_sum = foo(df, 'a', 'sum')   # 55
res_avg = foo(df, 'a', 'mean')  # 5.0

错误的原因是您试图传递一个没有参数的被调用函数的结果,而这个函数恰好需要参数才能工作。你知道吗

传递字符串的好处是您依赖于构建在Pandas框架中的经过测试的方法,例如^{}^{}等。虽然您可以尝试在Pandas系列中直接使用Python内置函数和NumPy函数,但您可能会发现与您所期望的不同之处。在可能的情况下,坚持使用记录在案的方法。你知道吗

网友
2楼 ·

不建议在一般情况下使用此方法获取函数,但这里有一个不需要任何额外导入的解决方案。 Python有一个getattr内置函数,它“[r]eturn object的命名属性的值。”它的用法是getattr(object, name[, default])。所以你需要重写你的函数如下。你知道吗

def something(dataframe,col_name,func):
    return getattr(dataframe[col_name], func)

something(df,'a',"sum")

如果要获得函数调用和的结果,请将函数定义替换为return getattr(dataframe.col_name, func)()。你知道吗

相关问题