我正在导入多个数据框并编写了以下过程:1.要覆盖到数据框的文件列表+ 2.我想要对应的数据框的名称列表。 3.我将列表合并成字典:
tbls = ['tbl1', 'tbl2', 'tbl3']
dbname = ['dfABC', 'dfrand', 'dfXYZ']
dictdf = dict(zip(tbls, dbname))
然后我循环遍历tbl以导入数据帧。 (下面的getdf是我编写的一个简短函数,用于读取表(数据)所在的excel / csv文件的路径,工作表名称等,并导入数据。
for tbl in tbls:
dictdf[tbl] = getdf(tbl, dfRT, sfsession)
该过程的工作原理是,将数据帧写入字典,即将字典中的dfABC替换为65K行和27列的数据帧,依此类推。
我想要的是dfABC = 65krows和27 cols的数据帧。即在上面的代码中。我尝试过:
str(dictdf[tbl]) = getdf(tbl, dfRT, sfsession)
但是那给出了一个错误。有没有办法做到这一点?谢谢。
使用exec并翻转字典来解决(不需要翻转):
tbls = ['tbl1', 'tbl2', 'tbl3']
dfa = ['dfABC', 'dfrand', 'dfXYZ']
dictdf = dict(zip(dbname, tbls))
for df in dfs:
tbl = dictdf[df]
exec(f'{df} = getdf(\'{tbl}\', dfRT, sfsession)')
请注意@Xukrao和@Yo_Chris关于将dfs保留在字典中的评论,这是一个很好的解决方案。
我发现这个问题对理解exec的工作方式很有帮助:What's the difference between eval, exec, and compile?