向应用于 pd.df 的 eval 函数添加参数

Add a parameter to eval function that is applied to pd.df

我有一个如下的程序,当每个函数只有一个参数时,它工作正常。

import pandas as pd

df = pd.DataFrame([1])
df.columns = ['number']

def add_one(x):
    return x+1

def add_two(x):
    return x+2

class Functions:
    add_one = "add_one"
    add_two = "add_two"

def main(df, func_name):
    return df.number.apply(eval(func_name))

func_name = Functions.add_one

main(df, func_name)

但是我给每个函数添加了另一个参数,它返回了 一个错误:

TypeError: 'int' object is not callable. 

如何让它使用两个参数?

import pandas as pd

df = pd.DataFrame([1])
df.columns = ['number']


def add_one(x, a):
    return x+1+a

def add_two(x, a):
    return x+2+a

class Functions:
    add_one = "add_one"
    add_two = "add_two"

def main(df, func_name):
    a = 1
    return df.number.apply(eval(func_name + '(x, a)'))

func_name = Functions.add_one

main(df, func_name)

您可以使用 args parameter 将参数单独传递给 .apply 函数,如下所示

import pandas as pd

df = pd.DataFrame([1])
df.columns = ['number']


def add_one(x, a):
    return x+1+a

def add_two(x, a):
    return x+2+a

class Functions:
    add_one = "add_one"
    add_two = "add_two"

def main(df, func_name):
    a = 1
    return df.number.apply(eval(func_name), args=(a,))

func_name = Functions.add_one

main(df, func_name)

输出:

0    3
Name: number, dtype: int64

希望对您有所帮助!