создание лямбда-выражений и применение к столбцу данных в al oop in python - PullRequest
1 голос
/ 23 апреля 2020

У меня есть 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 +')'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...