Код: Выделить всё
[df1, df2, fd3, df4, ...]
Код: Выделить всё
[clean_df1, clean_df2, clean_df2, ...]
Код: Выделить всё
[format_df1, format_df2, format_df2, ...]
Код: Выделить всё
final_data = {}
for i in [1,2,3,4,5,...]:
final_data[f'df{i}_final'] = eval(f'df{i}.pipe(clean_df{i}).pipe(format_df{i})')
Есть ли в Python какая-либо функция, позволяющая использовать эти соглашения об именах, чтобы избежать повторяющегося кода и не попасть в генерацию кода/
Код: Выделить всё
eval/execИзменить
На данный момент у меня есть несколько словарей:
Код: Выделить всё
data_registry = {'df1': df2, 'df2': df2, ...}
cleaning_registry = {'df1': clean_df2, 'df2': clean_df2, ...}
format_registry = {'df1': format_df2, 'df2': format_df2, ...}
Редактировать 2:
@matszwecja попросил подробнее о том, как определяются эти вещи.
Чтобы придать больше контекста вопросу - это функции в конвейере разработки функций.
Существует функция, которая создает фрейм данных с функцией
Функция, которая его нормализует (нормализация зависит от функции)
И функция, которая принимает ненормализованную функцию и форматирует ее в удобочитаемое значение (также специфичное для функции)
Я использую словари, а не списки, потому что сопоставление по индексу будет более подвержено ошибкам - скажем, если два списки не получили соответствующие функции в соответствующем индексе.
Примерно это:
Код: Выделить всё
def normalize_feature_i() -> pl.Expr:
return pl.max_horizontal(
pl.col('feature_i').list.get(0).pipe(_default_descending, -0.03),
pl.min_horizontal(
pl.col('feature_i').list.get(1).pipe(_default_descending, -0.03),
pl.col('feature_i').list.get(2).pipe(_default_descending, -0.03)
)
).alias('feature_i')
def fmt_feature_i(col: pl.Expr) -> pl.Expr:
def _fmt_feature_i(x):
val = min(x)
i = '' if x[0]==val else '*' if x[1]==val else '**' if x[2]==val else ''
return f'{val:.0%}{i}'
return col.map_elements(_fmt_feature_i)
Я думал о наличии класса Feature(), чтобы сохранить эту логику вместе, но это выглядело очень беспорядочно (код ML не должен заботиться о коде визуализации и т. д.)
Подробнее здесь: https://stackoverflow.com/questions/775 ... etitive-co