Конкретный пандас объединяет данные

1

Я пытаюсь объединить список файлов в один фрейм данных, чтобы записать его обратно в один 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, чтобы правильно комбинировать, но я не уверен, как справиться с этим или если это действительно проблема.

Изображение 174551

  • 1
    Я сталкивался с этим перед использованием concat , я держал столбцы в порядке, переупорядочив их впоследствии с помощью df.reindex(columns=columns_list) . Хотя я не могу точно объяснить, что произошло, я всегда буду делать это вместо того, чтобы полагаться на pd.concat чтобы вернуть правильный порядок. Лучше быть в безопасности, чем потом сожалеть!
  • 0
    Можете ли вы предоставить несколько строк ваших данных?
Показать ещё 2 комментария
Теги:
pandas
csv
dataframe
concat

1 ответ

0

Формат даты и времени:

Если вы посмотрите в документации для 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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню