【问题标题】:use dictionary value as a variable for df使用字典值作为 df 的变量
【发布时间】:2020-04-17 19:57:18
【问题描述】:

我正在导入多个数据帧并编写了以下过程:1. 要转换为数据帧的文件列表 + 2. 我想要的相应数据帧的名称列表。 3. 我把列表组合成字典:

tbls = ['tbl1', 'tbl2', 'tbl3']
dbname = ['dfABC', 'dfrand', 'dfXYZ']
dictdf = dict(zip(tbls, dbname)) 

然后我循环通过 tbls 来导入数据帧。 (下面的 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)

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

【问题讨论】:

  • 为什么不希望 DataFrames 存储在 dict 中?这是更好的选择。我不知道为什么当 DataFrames 已经厌倦了字典中的一个键时,你为什么要分配单个变量。
  • 为什么存储在字典中是更好的选择。我想处理这些数据框 - 即合并、拼接、添加新列等。如果它们位于字典中,我该怎么做?谢谢
  • 只需从字典中调用 DataFrames:dictdf['tbl1']
  • 为什么存储在字典中是更好的选择?
  • 使用字典比动态创建变量要好,因为它会减少复杂的代码。随着代码量(以及变量总数)的增长,跟踪某些特定的动态创建的变量将变得越来越困难。另一方面,跟踪单个字典变量要容易得多。

标签: python pandas dataframe dictionary


【解决方案1】:

使用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 的 cmets 将 dfs 保留在字典中作为一个更好的解决方案。

我发现这个问题有助于理解 exec 的工作原理:What's the difference between eval, exec, and compile?

【讨论】:

  • 我已将我的解决方案作为已接受的答案删除,因为 exec 在函数中停止工作。添加全局变量和局部变量不起作用。
猜你喜欢
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多