合并具有不规则时间戳和每个文件不同 header 名称的 CSV 列

Merge CSV columns with irregular timestamps and different header names per file

我有很长的 CSV 文件,每个文件中的 headers 都不同。 第一列总是一个时间戳,它的时间是不规则的,所以它很少匹配。

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,-6.1,0.0
2020-08-21T09:58:07.591,-0.0,-6.1,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,1.3,-5.7,360.0
2020-08-21T09:58:07.617,1.3,-5.7,360.0
....

file3.csv

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

目前一个文件夹中最多可以有 6 个该格式的 CSV 文件。

我想将这些 CSV 合并到一个文件中,其中所有列都根据时间戳进行识别和排序。当时间戳匹配时,数据将合并到其对应的行中。如果时间不匹配,它会得到一个带有空字段的单独行。

结果应该是这样的。

time,L_pitch,L_roll,L_yaw,R_pitch,R_roll,R_yaw,L_accel_lat,L_accel_long,L_accel_vert
2020-08-21T09:58:07.420,,,,,,,-0.00,-0.00,0.03
2020-08-21T09:58:07.430,,,,,,,-0.00,0.00,0.03
2020-08-21T09:58:07.440,,,,,,,-0.00,0.00,0.03
....
2020-08-21T09:58:07.581,-0.0,-6.1,0.0,,,,,,
2020-08-21T09:58:07.591,-0.0,-6.1,0.0,1.3,-5.7,360.0,,,

最后一行将是匹配时间码的示例,并且也将数据合并为一行

到目前为止,我试过这个 Github Link,但这会与文件名合并到 CSV 文件中,并且没有排序。 好像可以胜任,但我的技能不行。我还尝试了一些来自 GitHub...

的 python 文件

一个似乎最有希望改变用户,但它运行无休止(文件太大?)。

是否可以在 PowerShell ps1 或某种程度上(对我而言)“简单”python 脚本中执行此操作? 我会将其构建到批处理文件中以在多个文件夹中工作。

提前致谢

goam

正如您所说,您可以使用 pandas.

相当方便地解决您的问题
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* 的文件列表。我们遍历此列表并使用 pandas read_csv 读取每个文件。请注意,我们解析文件的日期(转换为 dtype datetime64[ns])并使用日期列作为数据框的索引。我们将数据帧存储在名为 tmp 的列表中。最后,我们使用 concat 在 tmp 中连接(单个文件的)单个数据帧,并立即使用 pandas to_csv.

将其写入名为 merged.csv 的文件