运行For循环只会生成最终创建的数据帧

2024-05-13 20:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

countries = ['EMU','Ger','Fra','Ita','Spa','UK','Swe','Nor','Swi','US','Jpn','Cad','Nzd','Aus','Pol','Skr']

for country in countries:
    df_name = 'df' + country
    df_name = df[[country + '_OECD_LI',country + '_Man_Conf',country + '_C_Conf',country + '_Serv_Conf',country + '_Av']].copy()
    
df_EMU}

我基本上需要每个国家的一个数据框,其中包含我的主数据框中的相关列

此代码返回一个名为“df_name”的df,它具有来自最终观测(Skr)的正确数据

非常感谢任何帮助

谢谢


Tags: 数据namedfconfcountrycountriesswespa
2条回答

有点不清楚每个df最终要做什么,但可以将每个df存储在一个新列表中:

countries = ['EMU','Ger','Fra','Ita','Spa','UK','Swe','Nor','Swi','US','Jpn','Cad','Nzd','Aus','Pol','Skr']

list_of_dfs = []
for country in countries:
    df_name = 'df' + country
    list_of_dfs.append(df[[country + '_OECD_LI',country + '_Man_Conf',country + '_C_Conf',country + '_Serv_Conf',country + '_Av']].copy())
  1. 数据帧df_name只包含上一次迭代的数据,因为您总是将变量df_name赋值

  2. 看起来您正在尝试使用国家名称创建数据框变量,因此df_EMUdf_Gerdf_Fra等等。您不能通过执行df_name = 'df' + country来创建变量。您可以使用locals()动态创建变量并为其赋值,但这通常不是必需的,或者是良好的实践。在以后的代码中,如何知道在您编写的代码中可以使用哪些国家/地区变量

  3. 一个更简单的解决方案是创建数据帧字典。每个键都是国家名称/代码,值是关联的数据帧

    countries = ['EMU','Ger','Fra','Ita','Spa','UK','Swe','Nor','Swi','US','Jpn','Cad','Nzd','Aus','Pol','Skr']
    dfs = {}  # empty dictionary
    for country in countries:
        dfs[country] = df[[country + '_OECD_LI',
                           country + '_Man_Conf',
                           country + '_C_Conf',
                           country + '_Serv_Conf',
                           country + '_Av']].copy()
    
    # You can then refer to the country dataframes with:
    dfs['EMU']
    dfs['Ger']
    dfs['Fra'] # etc.
    

    这样,所有可用的国家/地区都是字典中的关键字

顺便问一下,你有没有得到一个数据框,其中所有国家的数据都是单独的列?似乎是一个奇怪的数据源。通常情况下,将国家作为一列名称/代码,然后为每个功能设置不同的列(“OECD_LI”、“Man_Conf”等)

相关问题 更多 >