Я пытаюсь объединить список файлов в один фрейм данных, чтобы записать его обратно в один csv. Каждый раз, когда я объединяю файлы с помощью pd.concat, все полностью переупорядочивает себя (как столбцы, так и строки) в объединенном выходном файле. Мой код:
#create list of file paths
paths = []
for filepath in glob.iglob('pathtofiles'):
paths.append(filepath)
#create list of dataframes to combine
df_list = []
for file in paths:
df_list.append(pd.read_csv(file,header=0))
#combine all dataframes into single dataframe and output as csv
rebuild = pd.concat(df_list, sort=True)
rebuild.to_csv('combined.csv',index=False)
Отдельные файлы имеют столбцы в порядке ['time', 'name', 'quantity'] и упорядочены по столбцу ['time']. Когда я объединяю файлы, я хочу, чтобы они объединялись в порядке столбца ['time'], но я возвращаю совершенно другой порядок (т.е. ['Количество ",' время ',' имя ']), и файлы не по порядку.
Я думаю, что это имеет какое-то отношение к тому факту, что в настоящее время столбцы отдельных [[time]] строк являются строками, и я считаю, что они должны быть объектами datetime, чтобы правильно комбинировать, но я не уверен, как справиться с этим или если это действительно проблема.
Формат даты и времени:
Если вы посмотрите в документации для read_csv, вы увидите, что у нее есть аргумент "parse_dates". Чтобы сообщить pandas, что ваш столбец времени datetime, вы можете прочитать в csv, используя ниже pd.read_csv(file,header=0,parse_dates=['time'])
Проблема с порядком столбцов:
как уже упоминалось в Rocky, вы можете сохранить порядок столбцов, используя df.reindex(columns=columns_list)
где column_list - это порядок, в котором должны находиться столбцы.
Сортировка по столбцу времени:
Если вы хотите явно сортировать по столбцу даты, вы можете изменить свой to_csv
чтобы сначала отсортировать его так, как это rebuild.sort_values('time').to_csv('combined.csv',index=False)
concat
, я держал столбцы в порядке, переупорядочив их впоследствии с помощьюdf.reindex(columns=columns_list)
. Хотя я не могу точно объяснить, что произошло, я всегда буду делать это вместо того, чтобы полагаться наpd.concat
чтобы вернуть правильный порядок. Лучше быть в безопасности, чем потом сожалеть!