I have a program like below, it works fine when each function has only one parameter.
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)
But I added another parameter to each function, it returned an error:
TypeError: 'int' object is not callable.
How can I make it work with two parameters?
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)
You can pass your arguments separately to the .apply
function using the args
parameter as shown below.
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)
Output:
0 3
Name: number, dtype: int64