合并带有不规则时间戳记和每个文件不同标题名称的CSV列

问题描述

我有很长的CSV文件,每个文件中都有不同的标题。 第一列始终是时间戳,其时间不定时,因此很少匹配。

file1.csv

time,L_pitch,L_roll,L_yaw
2020-08-21T09:58:07.570,-0.0,-6.1,0.0
2020-08-21T09:58:07.581,0.0
2020-08-21T09:58:07.591,0.0
....

file2.csv

time,R_pitch,R_roll,R_yaw
2020-08-21T09:58:07.591,1.3,-5.7,360.0
2020-08-21T09:58:07.607,360.0
2020-08-21T09:58:07.617,360.0
....

file3.csv

time,L_accel_lat,L_accel_long,L_accel_vert
2020-08-21T09:58:07.420,-0.00,0.03
2020-08-21T09:58:07.430,0.00,0.03
2020-08-21T09:58:07.440,0.03
....

目前,一个文件夹中最多可以包含6种该格式的CSV文件

我想将这些CSV合并到一个文件中,在其中可以识别所有列并根据时间戳进行排序。当时间戳匹配时,数据将合并到其对应的行中。如果时间不匹配,则会在一行中包含空白字段。

结果应如下所示。

time,L_yaw,R_yaw,0.03
....
2020-08-21T09:58:07.581,0.0,2020-08-21T09:58:07.591,360.0,

最后一行将是一个匹配时间代码的示例,并且该数据也会合并到一行中

到目前为止,我尝试了此Github Link,但这与文件名合并到CSV中,并且没有排序。 Panda in Python似乎可以完成任务,但我的技能却不能胜任。我还尝试了一些来自GitHub的python文件...

This似乎最有希望改变用户,但它运行无止境(文件变大了吗?)。

是否可以在PowerShell ps1或某种程度上(对我来说)“简单”的python脚本中做到这一点? 我会将其构建为一个批处理文件,以在多个文件夹中工作。

预先感谢

goam

解决方法

如前所述,使用熊猫可以轻松解决问题。

import pandas as pd
import glob

tmp=[]
for f in glob.glob("file*"):
    print(f)
    tmp.append(pd.read_csv(f,index_col=0,parse_dates=True))

pd.concat(tmp,axis=1,sort=True).to_csv('merged')

一些解释:

在这里,我们使用glob使用通配符模式file*来获取文件列表。我们遍历此列表,并使用熊猫read_csv读取每个文件。请注意,我们解析文件的日期(转换为dtype datetime64[ns]),并将date列用作数据框的索引。我们将数据帧存储在名为tmp的列表中。最后,我们使用concat在tmp中合并了单个数据帧(单个文件的数据帧),并立即使用熊猫merged.csv将其写入名为to_csv的文件。