向应用于 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
希望对您有所帮助!
我有一个如下的程序,当每个函数只有一个参数时,它工作正常。
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
希望对您有所帮助!