将字典值用作df的变量

问题描述 投票:0回答:1

我正在导入多个数据框并编写了以下过程: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)

但是那给出了一个错误。有没有办法做到这一点?谢谢。

python pandas dataframe dictionary
1个回答
0
投票

使用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?

© www.soinside.com 2019 - 2024. All rights reserved.