Конкретный пандас объединяет данные - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь объединить список файлов в один фрейм данных, чтобы записать его обратно в один 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'], но я получаю совершенно другой порядок (т. Е. ['Amount', 'time', 'name']), и файлыне по порядку по строкам.

Я думаю, что это как-то связано с тем фактом, что в настоящее время столбцы отдельных файлов '[' time '] являются строками, и я считаю, что они должны быть объектами datetime в порядкеправильно совмещать, но я не уверен, как правильно с этим справиться или действительно ли это проблема.

enter image description here

1 Ответ

0 голосов
/ 01 декабря 2018

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

Если вы посмотрите документацию на read_csv, вы увидите, что она имеет аргумент "parse_dates".Чтобы сообщить пандам, что ваш столбец времени - это дата и время, вы можете прочитать в csv, используя ниже pd.read_csv(file,header=0,parse_dates=['time'])

Проблема порядка столбцов:

, как уже упоминал Рокки, вы можете сохранить порядок столбцов, используяdf.reindex(columns=columns_list) где column_list - это порядок, в котором вы хотите разместить столбцы.

Сортировка по времени выпуска столбца:

Если вы хотите явно отсортировать по столбцу даты, вы можете изменить свой to_csv чтобы сначала отсортировать это так rebuild.sort_values('time').to_csv('combined.csv',index=False)

...