Я пытаюсь обработать несколько фреймов данных с помощью функции и сохранить результат в отдельных соответствующих фреймах данных.Однако, похоже, что функция не хранит переменную правильно.
Вот функция:
def customize_df(in_df,out_df,old_col_val,new_col_val,vol):
out_df = in_df.copy()
# Adjust hemisphere contigent values
if 'lh' in out_df:
out_df.columns = out_df.columns.str.replace('lh_', 'L_')
if 'rh' in out_df:
out_df.columns = out_df.columns.str.replace('rh_', 'R_')
# Adjust column names.
out_df.columns = out_df.columns.str.replace(old_col_val, new_col_val)
# Change the name of the first column to ID.
out_df.columns = out_df.columns.str.replace(out_df.columns[0], "ID")
# Make Volumetric eTIV adjustments
if vol==True:
df_raw = out_df.copy()
df_raw.columns = df_raw.columns.str.replace('_Vol', '_Vol_Raw')
df_raw.columns = df_raw.columns.str.replace('_volume', '_Vol_Raw')
df_raw = pd.DataFrame(data = df_raw, columns= df_raw.columns)
df2 = out_df.copy()
df2.columns = df2.columns.str.replace('_volume', '_Vol_Adj')
df2 = pd.DataFrame(data = df2, columns= df2.columns)
cols = out_df.columns[out_df.columns.str.contains('_Adj')].tolist()
for col in cols:
df2[col] = df2[col].div(df2['eTIV'], axis=0)
df_combined= df_raw.join(df2, rsuffix='_DROP')
cols = df_combined.columns[df_combined.columns.str.contains('_DROP')].tolist()
for col in cols:
df_combined = df_combined.drop([col], axis=1)
out_df = df_combined.copy()
return out_df
elif vol==False:
return out_df
Она работает, как и предполагалось, однако, когда я запускаю функцию с несколькими последовательными входами,кажется, что результаты не сохраняются в "out_df", как предполагалось.
Вот команды:
customize_df(lh_exvivo_Area,'lh_ExV_Area','_exvivo_area','_ExV_Area',vol=True)
customize_df(Sub_GM_Vol,'Sub_GM_Vol','','_Sub_GM_Vol',vol=True)
customize_df(Sub_WM_Vol,'Sub_WM_Vol','','_Sub_WM_Vol',vol=True)
Когда я проверяю это, вводя имя желаемого результатафрейм данных, результата нет.
lh_ExV_Area.head()
NameError: name 'lh_ExV_Area' is not defined