【问题标题】:Reading multiple CSV files with different names using python dictionary in a for loop在for循环中使用python字典读取具有不同名称的多个CSV文件
【发布时间】:2019-10-02 23:15:16
【问题描述】:

我有一个存储在 python 字典中的文件名和文件路径列表。我正在尝试使用 pandas 的 read_csv 读取文件并从字典中分配数据框名称。我可以在运行 for 循环时读取和打印数据帧,但在循环完成后我无法调用数据帧。我可以将所有数据帧附加到一个列表中,但这样我就无法为这些数据帧分配不同的名称,这些名称也存储在字典中。

我查看了各种论坛,但没有一个能解释为什么带有 pd.read_csv 的 for 循环不起作用,以及为什么我无法将名称分配给 for 循环中的数据帧以供以后使用。

import pandas as pd
files_dict = {"Filter":"OUTTYPENM.csv","previous":"previous.csv"}
for key, value in files_dict.items():
    key = pd.read_csv(value)
Filter.head()

我希望看到过滤器数据帧的前五行,就好像我已经阅读了以下数据帧一样。

Filter = pd.read_csv("OUTTYPENM.csv")

所有 csv 文件都在当前工作目录中。

当我运行 for 循环代码并运行 Filter.head() 时,我收到一条错误消息 - NameError: name 'Filter' is not defined

【问题讨论】:

  • 当你print(key) 时会发生什么?
  • 你从未定义过Filter
  • 只需使用数据框的字典,而不是单独的命名对象。
  • 当我在 for 循环中 print(key) 时,它会在循环迭代时一一打印所有数据帧。如果我在 for 循环之外打印它,它会打印 for 循环中的最后一个数据帧。我正在使用 Anaconda 的 spyder 来执行此操作。

标签: python pandas dataframe


【解决方案1】:

这并不能完全回答您的问题,但我认为它将您带到一个类似的地方,而不涉及任何 exec()locals() 电话。

不用创建以字典键命名的变量,您可以只创建第二个字典,其中键相同,值现在是您读入的 DF。

import pandas as pd
files_dict = {"Filter":"OUTTYPENM.csv","previous":"previous.csv"}
df_dict = {}
for key, value in files_dict.items():
    df_dict[key] = pd.read_csv(value)
df_dict['Filter'].head()

【讨论】:

  • 或者使用字典理解:df_dict = {key: pd.read_csv(value) for key, value in files_dict.items()}
【解决方案2】:

试试这个:

for key, value in files_dict.items():
    locals()[key] = pd.read_csv(value)

虽然不推荐这种方法。看这里的链接:https://www.linuxquestions.org/questions/programming-9/python-create-variables-from-dictionary-keys-859776/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多