簡體   English   中英

在 concat for 循環中使用 f-string 調用變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM