问题描述
我有很长的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
....
我想将这些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
的文件。