У меня есть jsonDict
словарь, который я получаю из файла json, который сообщает мне, для какого столбца какой метод должен быть выполнен, а метод createMethodName
в Utilities
создает код для выполнения
for col in columnList:
if (col in df_output.columns):
methodNameWithParam = Utilities.createMethodName(
jsonDict["MethodMapper"][col] , dict1[col])
df_output[col] = df_input.apply(lambda x: methodNameWithParam , axis=1)
пример Предположим, что список отображения метода col = Coffee
json даст мне имя метода Coffee_maker
, dict1 [col] даст мне список входных данных для метода - предположим, входные данные [coffee,sugar,milk]
, поэтому createMethodName
выдаст мне вывод как Maker.Coffee_maker(x['coffee'],x['sugar'],x['milk'])
, так что я добавлю это в команду lambda - Maker - это класс, в котором присутствует весь метод.
methodNameWithParam = Maker.Coffee_maker(x['coffee'],x['sugar'],x['milk'])
, поэтому для каждой итерации это выглядит как
df_output[col] = df_input.apply(
lambda x: Maker.Coffee_maker(x['coffee'],x['sugar'],x['milk']), axis=1)
другие примеры
col = tea
jsonDict["MethodMapper"][col] = tea_maker
dict1[col] = tea,milk,sugar
methodNameWithParam = Maker.tea_maker(x['tea'],x['milk'],x['sugar'])
Но проблема, которую я получаю, функция apply обрабатывает ее как строку и весь столбец заполняется Maker.tea_maker(x['tea'],x['milk'],x['sugar'])
, функция не выполняется
ниже функции createMethodName
class Uitilities
def createMethodName(methodname, inputlist):
args= []
for item in inputlist:
args.append('x['+item+']')
argsString= ','.join(args)
return 'Maker.'+ methodname +'(' + argsString +')'