【发布时间】:2019-05-03 01:19:12
【问题描述】:
我正在尝试将文件列表合并到一个数据帧中,以便将其写回单个 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 对象才能正确组合,但我不确定如何正确处理这个问题,或者如果这确实是问题。
【问题讨论】:
-
我在使用
concat之前遇到过这种情况,我通过之后使用df.reindex(columns=columns_list)重新排序来保持列的顺序。虽然我无法准确解释发生了什么,但我将始终这样做,而不是依靠pd.concat来返回正确的顺序。安全总比后悔好! -
你能提供几行数据吗?
-
读取 csv 时,将时间列设置为日期时间。 read_csv 中有 args 可以执行此操作。然后在你写csv的时候,留下索引。
-
@jeschward - 我添加了前几行的图片。我希望按第一列“时间”排序
标签: python pandas csv dataframe concat