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

问题描述 投票:0回答:1

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

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'对象不可调用。如何使用两个参数使其工作?

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)
python pandas apply eval df
1个回答
0
投票

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

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

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.