[英]Calling variables with f-string inside concat for loop
我正在嘗試使用pd.concat
組合數據幀。
我有 7 個模型,根據年份(2021 年和 2022 年)分為 2 個,所以我總共有 14 個數據框,每個數據框包含 4 列。 它們可以通過以下命令創建:
concat_list = ['expert_2021', 'expert_2022', 'forecast_168_2021', 'forecast_168_2022',
'forecast_24_2021', 'forecast_24_2022', 'forecast_custom_2021', 'forecast_custom_2022',
'forecast_lear_2021', 'forecast_lear_2022', 'forecast_standard_2021',
'forecast_standard_2022', 'auto_2021', 'auto_2022']
n = 14
df_list = [pd.DataFrame({"Price_REG1":[], "Price_REG2":[], "Price_REG3":[], "Price_REG4":[]}) for x in range(n)]
for i, j in zip(concat_list, range(14)):
locals()[i] = df_list[j]
現在,我想將這些組合成 8 個新數據框,每個數據框代表 1 年和 1 列,所以 2 年 * 4 列 = 8。我想在 for 循環中執行此操作。 我正在使用 f-strings 循環多年,並使用列將數據幀放在列表中。
year_list = [2021, 2022]
prediction = []
for p in year_list:
for j, s in zip(range(1,5), range(4)):
a = pd.concat([f'forecast_24_{p}.Price_REG{j}', f'forecast_168_{p}.Price_REG{j}',
f'forecast_standard_{p}.Price_REG{j}', f'forecast_custom_{p}.Price_REG{j}',
f'expert_{p}.Price_REG{j}', f'forecast_lear_{p}.Price_REG{j}',
f'auto_{p}.Price_REG{j}'], axis=1)
prediction.append(a)
這給了我TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid
TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid
所以,我知道字符串是問題所在。 但我的問題是是否有辦法讓這些字符串調用數據幀,或者是否有其他替代解決方案來解決此類問題?
謝謝。
您必須使用globals()
來獲取數據幀:
year_list = [2021, 2022]
prediction = []
for p in year_list:
for j, s in zip(range(1,5), range(4)):
df_list2 = [globals()[f'{prefix}_{p}'][f'Price_REG{j}']
for prefix in ['forecast_24', 'forecast_168', 'forecast_standard',
'forecast_custom', 'expert', 'forecast_lear', 'auto']]
a = pd.concat(df_list2, axis=1)
prediction.append(a)
注意:您不能在此處使用locals()
,因為 scope 是列表理解,您將無法訪問您的數據框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.