【问题标题】:Can i really use a dictionary instead of dynamically assigning a variable?我真的可以使用字典而不是动态分配变量吗?
【发布时间】:2018-05-12 07:17:48
【问题描述】:

这里的目的是读入许多 csv 文件,每个文件都读入一个单独的 Pandas 数据框。以下三行中的第三行在“=”之前是错误的。我已经阅读了很多关于使用字典而不是动态变量的帖子,但看不到如何在这里应用它。除了 globals() 方式之外,还有其他似乎有很多反对意见的方式吗?

testlist = ['A', 'B', 'C']
for dfsuffix in testlist:
    'df' + dfsuffix = pandas.read_csv(dfsuffix + '.csv')

因此,例如,我正在寻找将第一次迭代解释为:

dfA = pandas.read_csv('A.csv')

数据帧具有不同的行长,所以我不认为多维数组或多索引数据帧是理想的。尽管它们具有相同的列,但我不想附加它们。

注意。我应该补充一点,我事先不知道 testlist 的内容是什么,除了它们将是由用户输入填充的日期列表。

【问题讨论】:

  • 创建 1 个包含 3 个条目的字典,而不是创建 3 个变量。很简单。
  • 是的,您可以使用字典。 df[dfsuffix] = pandas.read_csv(dfsuffix + ".csv") 允许您使用 df["A"] 引用数据框。
  • 使用df_dict = {},然后在循环中,而不是分配给globals dict,只需分配给您刚刚定义的那个:df_dict[dfsuffix] = pandas.read_csv(dfsuffix + ".csv")
  • 不,df["A"] 与硬编码 dfA 没有什么不同。它只是一个持有对值的引用的变量。
  • @JonB451 嗯,更像是对 Python 强大的内置哈希映射数据结构的信任。

标签: python arrays variables dataframe scope


【解决方案1】:

与动态生成变量名相比,字典是首选的解决方案。

考虑这段代码:

df = {}
testlist = ['A', 'B', 'C']
for dfsuffix in testlist:
    df[dfsuffix] = pandas.read_csv(dfsuffix + '.csv')

和这段代码没有什么不同:

df = {
    'A': pandas.read_csv('A.csv'),
    'B': pandas.read_csv('B.csv'),
    'C': pandas.read_csv('C.csv')
}

以下两个语句在功能上是相同的:

dfA = pandas.read_csv('A.csv')
df["A"] = pandas.read_csv('A.csv')

唯一的区别是字典更容易在循环中使用。存储的数据是相同的。

【讨论】:

  • 即使是字典理解:df = {dfsuffix : pandas.read_csv(dfsuffix + '.csv') for dfsuffix in testlist}...btw - 很高兴看到伟大的 tkinter 传奇跨越到 pandas!
  • @Parfait 我不是“跨界到熊猫”——这不是熊猫问题,它只是基本的 python。我从来没有用过熊猫。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2021-10-14
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2015-07-10
相关资源
最近更新 更多