Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向应用于pd.df的eval函数添加一个参数_Python_Pandas_Dataframe_Apply_Eval - Fatal编程技术网

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

Python 向应用于pd.df的eval函数添加一个参数,python,pandas,dataframe,apply,eval,Python,Pandas,Dataframe,Apply,Eval,我有一个如下的程序,当每个函数只有一个参数时,它工作得很好 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_nam

我有一个如下的程序,当每个函数只有一个参数时,它工作得很好

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
将参数分别传递给
。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

希望这有帮助

您可以将参数分别传递给
。使用
args
应用函数,如下所示

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
希望这有帮助