В настоящее время я работаю над собственной структурой, которую мы используем для операций 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 (), поэтому пользователь будет указывать столбцы, уникальные для их данных, и ( б) я не могу знать, какие данные они будут использовать в функции раньше времени. Я неправильно продумываю это и упускаю что-то простое?