Есть ли способ импортировать csv-файлы в pandas, используя значения словаря для имен фреймов данных?

#python #pandas #csv #dictionary

#python #pandas #csv #словарь

Вопрос:

Я только начал с 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 =0955a и NeW_ID=0955b и так далее должен быть в одном. Перед этим они должны быть изменены. Поэтому я не могу прочитать файл и использовать pd.concat() напрямую.

Комментарии:

1. Каков ваш ожидаемый результат? Что вы подразумеваете под «именами» фреймов данных (вы имеете в виду ключи словаря)?

2. Вместо того, чтобы импортировать файлы 0905a=pd.read_csv("C:/path/LG__380.csv", sep=';', decimal=',') один за другим, я хочу импортировать их вместе, но используя значения в dicitonary CSVdict[‘New_ID’] в качестве значения «name».

3. итак, вы хотите pd.concat() их всех, откуда берется new_id значение?

4. Я изменил описание, чтобы лучше объяснить цель с помощью этих фреймов данных. Надеюсь, это поможет

Ответ №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=",")
 

Если вам нужно пометить каждый фрейм данных, вы можете добавить в for цикл следующую строку:

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

где d["New_ID"] будет идентификатор, применяемый к каждому фрейму данных.

Комментарии:

1. Спасибо! Я использовал ваш код и получил словарь фреймов данных. Не могли бы вы рассказать мне, как бы вы написали цикл for, чтобы ключи в этом словаре были значением CSV_dict["New_ID"] ?

2. Я обновил код в последней строке for цикла, который я изменил dataframes[path] для dataframes[d["New_ID"]]