首页 > 解决方案 > 将数据帧动态分配给 for 语句中的对象

问题描述

我有 4 个带有数据的数据框:

最终_101

final_102

final_103

final_104

我想通过最后一个数字动态调用它们来将它们打印到一个文本文件中。我尝试使用下面的代码,但我无法让它工作,因为动态步骤只给出了一个字符串值而不是数据框:

file_extension = ['101', '102', '103', '104']

with open(f"myfile_{timestamp}.txt", mode="w", encoding="utf-8") as f:
  for names in file_extension :
        f.write("\n" + f"{names}_data" + "\n")
        new_file = 'final_'+str(names)
        new_file.loc['Total'] = new_file['samp'].sum()
        f.write("\n"+str(new_file)+"\n")

该步骤new_file = 'final_'+str(names)只是为 new_file 提供一个字符串值,而不是数据。有没有办法动态调用对象?

注意:文件 final_101、final_102、final_103、final_104 在内存中,而不是在任何文件位置。

下面是此代码的正确解决方案, sabik 也提到了可以使用它们的不同场景

dfs = {'101' : final_101, '102': final_102, '103': final_103, '104': final_104}

with open(f"myfile_{timestamp}.txt", mode="w", encoding="utf-8") as out_f:
  for i, (key, df) in enumerate(dfs.items()):
        out_f.write("\n" + f"{key}_data" + "\n")
        new_file = df.copy()
        new_file.loc['Total'] = new_file['samp'].sum()
        out_f.write("\n"+str(new_file)+"\n")

标签: pythonpandas

解决方案


(根据评论更新...)

可以在 python 中按名称检索变量,但并不推荐。

如果只有四个,您可以很容易地对它们进行硬编码:

dfs = [final_101, final_102, final_103, final_104]

with open(f"myfile_{timestamp}.txt", mode="w", encoding="utf-8") as out_f:
  for i, df in enumerate(dfs):
    header = i == 0  # only write out the header for the first one
    df.to_csv(out_f, header=header)

如果您有一个可变数字,最好的方法是更改​​生成它们的代码,以便将数据放入字典中,以便它们被调用final[101]final['101'](取决于 101 是更好地被认为是数字还是文本标签)。然后你就可以迭代了final.items(),像这样:

with open(f"myfile_{timestamp}.txt", mode="w", encoding="utf-8") as out_f:
  for i, (key, df) in enumerate(final.items()):
    header = i == 0  # only write out the header for the first one
    # optionally write out key here
    df.to_csv(out_f, header=header)

如果您绝对必须按名称查找变量,您可以检查globals(); 不过,在日常编程中并不真正推荐它。


推荐阅读