我正在尝试将文件列表合并到一个数据帧中,以便将其写回到单个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']列的顺序进行合并,但是我得到了完全不同的顺序(即['quantity','time','name']),并且文件是按顺序乱序。
我认为这与以下事实有关:当前,独立文件的['time']列是字符串,并且我相信它们必须是datetime对象才能正确组合,但是我不确定如何正确处理此问题,或者实际上是问题所在。
答案 0 :(得分:0)
日期时间格式问题:
如果您在read_csv的文档中查找,则可以看到它具有参数“ parse_dates”。为了告诉熊猫您的时间列是日期时间,您可以使用以下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)