Есть ли способ проверить, что лямбда-функция, переданная в качестве аргумента, присваивает только True или False? - PullRequest
0 голосов
/ 20 апреля 2020

В настоящее время я работаю над собственной структурой, которую мы используем для операций ETL, и одним из компонентов которой является написание функций, которые выполняют часто используемые операции для DataFrames. Текущая функция, над которой я работаю, получит функцию, которая назначит True или False записи в DataFrame. Затем он удалит записи, где функция оценивается как истинная для записи (для поведения по умолчанию).

Функция в настоящее время работает так, как и должна, но вы получите неожиданное поведение, если передадите функцию, которая присваивает записи значения, отличные от True или False. Моя проблема в том, что я не знаю, как это сделать, или если это вообще возможно. Я знаком с основами проверки аргументов, но не знаю, как можно проверить, соответствует ли функция, переданная в качестве аргумента, определенным стандартам.

Функция и ее аргументы в рабочем процессе вызываются следующим образом:

udo.call(
        "drop_records", #function name
        drop_func= lambda x: True if (x["Discussion"] == True)|(x["Internal"] == False) else False,
        drop_true= False
    )

И функция определяется ниже:

def drop_records(self,input_data,params):
        drop_func = params["drop_func"]
        try:
            drop_true = params["drop_true"]
        except:
            drop_true = True
        try:
            drop_col = params["drop_col"]
        except:
            drop_col = "drop_col"

        df = input_data.copy(deep=True)

        df[drop_col] = df.apply(drop_func, axis=1)
        df.drop(df.loc[df[drop_col]==drop_true].index,inplace=True)
        df.drop(columns=[drop_col],inplace=True)
        df.reset_index(drop=True,inplace=True)

        return df

Я думал о создании какого-то вида списка, чтобы запустить функцию и проверить ее, но это не похоже на то, что она будет работать, потому что (a) функция применяется к DataFrame с помощью apply (), поэтому пользователь будет указывать столбцы, уникальные для их данных, и ( б) я не могу знать, какие данные они будут использовать в функции раньше времени. Я неправильно продумываю это и упускаю что-то простое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...