python - 将数据帧动态分配给 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")
解决方案
(根据评论更新...)
可以在 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()
; 不过,在日常编程中并不真正推荐它。
推荐阅读
- apache-nifi - NiFi中如何统计JSON对象流文件的记录数?
- javascript - 如何在我的邮件刀片页面中导入和运行函数脚本
- c - 我可以更快地在整数之间传输符号吗(在 C5515 上)?
- stripe-payments - 这种设置是否符合 PCI DSS?
- excel - Excel VBA 查找函数 - 不适用于公式单元格
- encode - WinBUGS 1.43 中的 Mojibake(奇怪的汉字)
- angular - For some reason my custom mat-erro is not working. Anyone knows why?
- c - pthreads mutex: protect member of a struct
- c++ - 从此时起禁用 GCC 误导性缩进警告?
- c# - 为什么我的代码会抛出“信号量已被处理”异常?