#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"]]