【问题标题】:Using a list to generate dataframes in for loop使用列表在 for 循环中生成数据帧
【发布时间】:2021-11-16 13:04:58
【问题描述】:

我有四个数据框 df_may、df_jun、df_jul、df_aug。 虽然我可以用 4 行代码手动将它们写入单个 csv 文件,但我想在 for 循环中这样做。

这是我尝试过的,带有 SytnaxError

months = ['may','jun','jul','aug']
for i in months:
       df_{}.format(i).to_csv('raw_master_{}'.format(i))

另外,我可以使用笔记本中的现有数据框以某种方式提取列表“月”吗?

【问题讨论】:

  • 为什么不使用 dict ,其中 key 是您要写入 csv 的名称,而 value 是实际数据帧,然后遍历字典的键并用其各自的数据帧写入每个数据帧名称来自字典的键。

标签: python pandas string list syntax


【解决方案1】:

我会使用字典将变量与月份相关联:

month_dfs = {'may': df_may, 'jun': df_jun, 'jul': df_jul, 'aug': df_aug}
for month, df in month_dfs.items():
    df.to_csv(f'raw_master_{month}')

如果你真的想通过匹配变量名来做到这一点,那么你可以使用locals 函数,但我不建议这样做。该代码非常脆弱且难以理解,代码分析器/ linter 将无法为您捕获错误。

for month in months:
    locals()[f'df_{month}'].to_csv(f'raw_master_{month}')

【讨论】:

    【解决方案2】:

    另外,我可以使用笔记本中的现有数据框以某种方式提取列表“月”吗?

    您需要在此处指定您所指的笔记本,或数据包含的内容,否则很难回答。如果您不能直接从 DataFrames 中获取月份字符串,您可以使用 zip()。

    for month, data in zip(['may', 'jun', 'jul', 'aug'], [df_may, df_jun, df_jul, df_aug]):
           data.to_csv(f'raw_master_{month}')
    

    【讨论】:

      【解决方案3】:

      您不能像尝试使用df_{} 那样动态地更改变量。您可以将所有数据框放在一个列表中并对其进行迭代,并将其与包含月份的列表一起压缩。

      months = ['may','jun','jul','aug']
      df_list = [df_may, df_jun,df_jul,df_aug]
      for df, month in zip(df_list, months) :
             df.to_csv(f'raw_master_{month}')
      
      

      如果您想以动态方式使用变量,您最终可以在代码中使用globals() [f"df_{month}" ]locals()eval(f"df_{month}") 代替df_{}

      【讨论】:

        猜你喜欢
        • 2020-08-14
        • 2020-12-06
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多