pandas 在concat for循环内使用f字符串调用变量

dluptydi  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(175)

我正在尝试使用pd.concat组合 Dataframe 。
我有7个模型,根据年份分为2个(2021年和2022年),所以总共有14个 Dataframe ,每个包含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]

现在,我想将这些 Dataframe 组合成8个新的 Dataframe ,每个 Dataframe 代表1年和1列,因此2年 * 4列= 8。我想在一个for循环中完成这一操作。我使用f字符串在年和列之间循环,将 Dataframe 放入一个列表中。

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
所以,我知道字符串是问题所在,但我的问题是,是否有办法让这些字符串调用 Dataframe ,或者是否有其他的解决方案来解决这类问题?
谢谢你。

rsl1atfo

rsl1atfo1#

您必须使用globals()来获取 Dataframe :

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(),因为作用域是列表解析,您将无法访问 Dataframe 。

相关问题