Concat Pandas Dataframe组合混乱

时间:2018-11-30 21:21:45

标签: python pandas csv dataframe concat

我正在尝试将文件列表合并到一个数据帧中,以便将其写回到单个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对象才能正确组合,但是我不确定如何正确处理此问题,或者实际上是问题所在。

enter image description here

1 个答案:

答案 0 :(得分:0)

日期时间格式问题:

如果您在read_csv的文档中查找,则可以看到它具有参数“ parse_dates”。为了告诉熊猫您的时间列是日期时间,您可以使用以下pd.read_csv(file,header=0,parse_dates=['time'])

在csv中进行读取

列顺序问题:

Rocky已经提到过,您可以使用df.reindex(columns=columns_list)保持列顺序,其中column_list是您希望列在其中的顺序。

按时间列排序:

如果您想按日期列进行显式排序,则可以更改to_csv使其首先像这样rebuild.sort_values('time').to_csv('combined.csv',index=False)

进行排序