【问题标题】:Is there a way to import csv files into pandas using values of a dictionary for the name of the dataframes?有没有办法使用字典的值作为数据框的名称将 csv 文件导入熊猫?
【发布时间】:2021-05-31 00:24:22
【问题描述】:

我刚开始使用 python,目前正在尝试将多个 csv 文件作为数据帧导入。虽然有一些类似的问题,但它们似乎对我的问题没有帮助。 csv 文件具有相同的结构,并且名称不是我希望它们作为数据框导入时的名称。字典列表包含数据框的名称(它们应该如何)以及 csv 文件的名称。 由于我需要使用不同的文件夹多次执行此操作,因此我尝试创建一个公式:

def import_csv(CSVdict):
    for index in range(len(CSVdict)):
       CSVdict[index]["New_ID"]=pd.read_csv(("C:/path/"+str(CSVdict[index]["csvDatei"])+".csv"),sep=';',decimal=',')

我不确定我的错误在哪里,你能帮帮我吗? 字典列表如下所示:

[{'Nr': 0905', 'New_ID': '0905a', 'csvDatei': 'LG__380'}, {'Nr': '0905', 'New_ID': '0905b', 'csvDatei': 'LG__376'}, {'Nr': '0955', 'New_ID': '0955a', 'csvDatei': 'LG__53'}, {'Nr': '0955', 'New_ID': '0955b', 'csvDatei': 'LG__50'}]

稍后我需要 pd.concat() 在 Nr 中具有相同值的数据帧。所以带有New_ID =0955aNeW_ID=0955b 等的数据框需要合二为一。在此之前,他们必须进行调整。所以我无法读取文件并直接使用 pd.concat() 。

【问题讨论】:

  • 您的预期输出是什么?数据框“名称”是什么意思(您的意思是字典键)?
  • 我不想将0905a=pd.read_csv("C:/path/LG__380.csv", sep=';', decimal=',')之类的文件一一导入,而是将它们一起导入,而是使用字典CSVdict['New_ID']中的值作为值“名称”。跨度>
  • 所以你想pd.concat()他们都,new_id值从哪里来?
  • 我更改了描述以更好地解释这些 DataFrame 的目标。我希望这会有所帮助

标签: python pandas csv dictionary


【解决方案1】:

您可以使用文件名作为键,例如:

CSV_dict = [
    {'Nr': '0905', 'New_ID': '0905a', 'csvDatei': 'LG__380'}, 
    {'Nr': '0905', 'New_ID': '0905b', 'csvDatei': 'LG__376'}, 
    {'Nr': '0955', 'New_ID': '0955a', 'csvDatei': 'LG__53'}, 
    {'Nr': '0955', 'New_ID': '0955b', 'csvDatei': 'LG__50'},
]

dataframes = {}
for d in csv_dict:
    path = "C:/path/{}.csv".format(d["csvDatei"])
    dataframes[d["New_ID"]] = pd.read_csv(path, sep=";", decimal=",")

如果您需要标记每个 DataFrame,可以将以下行添加到 for 循环中:

dataframes[path]["ID_col"] = d["New_ID"]

d["New_ID"] 是应用于每个数据帧的 ID。

【讨论】:

  • 谢谢!我用你的代码得到了一个数据框字典。你能告诉我你将如何编写 for 循环,这样字典中的键就是 CSV_dict["New_ID"] 的值吗?
  • 我已经更新了代码,在for 循环的最后一行我将dataframes[path] 更改为dataframes[d["New_ID"]]
猜你喜欢
  • 2020-07-04
  • 2021-11-30
  • 2021-02-04
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
相关资源
最近更新 更多