合并时保留 csv 文件的副本
Keeping duplicates of csv files when merging
我正在尝试用两个 csv 文件创建一个数据集;
第一个csv文件有更多的属性(id、att1、att2、att3、label)
第二个与第一个有相同的id,(id, att4, att5)
我正在尝试合并这些文件而不对属性值进行分组,例如,第一个 csv 文件:
id, att1, att2, att3, label
1,5,20,30,0.2,10
2,5,20,30,0.2,13
1,5,50,30,0.2,20
2,5,20,30,0.5,80
1,4,10,30,0.2,90
1....
5....
3...
5....
第二个 csv:
id, att4, att5
1,5,6
2,7,8
3,0,2
4,1,9
5,.....
结果:
id, att1, att2, att3, label, att4, att5
1,5,20,30,0.2,10,5,6
2,5,20,30,0.2,13,7,8
1,5,50,30,0.2,20,5,6
2,5,20,30,0.5,80,7,8
1,4,10,30,0.2,90,5,6
1....
5....
3...
5....
拜托,我真的尝试了很多使用 Talend 的可能性,有没有办法为此使用 python(我是 python 的新手)
您的第一个 csv 有问题,header 中只有 5 列,但数据行中有 6 列。我将其更改为:
第一个 csv:
id,id2,att1,att2,att3,label
1,5,20,30,0.2,10
2,5,20,30,0.2,13
1,5,50,30,0.2,20
2,5,20,30,0.5,80
1,4,10,30,0.2,90
第二个 csv:
id,att4,att5
1,5,6
2,7,8
3,0,2
4,1,9
然后你可以使用merge
:
df1 = pd.read_csv('test.csv')
df2 = pd.read_csv('test2.csv')
df = pd.merge(df1, df2, on=['id'])
print(df)
id id2 att1 att2 att3 label att4 att5
0 1 5 20 30 0.2 10 5 6
1 1 5 50 30 0.2 20 5 6
2 1 4 10 30 0.2 90 5 6
3 2 5 20 30 0.2 13 7 8
4 2 5 20 30 0.5 80 7 8
然后这样做:
df.to_csv('merged.csv', index=False)
merged.csv:
id,id2,att1,att2,att3,label,att4,att5
1,5,20,30,0.2,10,5,6
1,5,50,30,0.2,20,5,6
1,4,10,30,0.2,90,5,6
2,5,20,30,0.2,13,7,8
2,5,20,30,0.5,80,7,8
如果你想用Talend来解决这个问题,很简单。您只需要为每个输入文件一个 tFileInputDelimited,一个 tMap,选择“first.csv”作为主流,第二个作为查找。然后你加入“id”列(左连接)并在输出中拉出你想要的字段(tFileOutputDelimited)。经典 tMap 用法。
我正在尝试用两个 csv 文件创建一个数据集; 第一个csv文件有更多的属性(id、att1、att2、att3、label) 第二个与第一个有相同的id,(id, att4, att5)
我正在尝试合并这些文件而不对属性值进行分组,例如,第一个 csv 文件:
id, att1, att2, att3, label
1,5,20,30,0.2,10
2,5,20,30,0.2,13
1,5,50,30,0.2,20
2,5,20,30,0.5,80
1,4,10,30,0.2,90
1....
5....
3...
5....
第二个 csv:
id, att4, att5
1,5,6
2,7,8
3,0,2
4,1,9
5,.....
结果:
id, att1, att2, att3, label, att4, att5
1,5,20,30,0.2,10,5,6
2,5,20,30,0.2,13,7,8
1,5,50,30,0.2,20,5,6
2,5,20,30,0.5,80,7,8
1,4,10,30,0.2,90,5,6
1....
5....
3...
5....
拜托,我真的尝试了很多使用 Talend 的可能性,有没有办法为此使用 python(我是 python 的新手)
您的第一个 csv 有问题,header 中只有 5 列,但数据行中有 6 列。我将其更改为:
第一个 csv:
id,id2,att1,att2,att3,label
1,5,20,30,0.2,10
2,5,20,30,0.2,13
1,5,50,30,0.2,20
2,5,20,30,0.5,80
1,4,10,30,0.2,90
第二个 csv:
id,att4,att5
1,5,6
2,7,8
3,0,2
4,1,9
然后你可以使用merge
:
df1 = pd.read_csv('test.csv')
df2 = pd.read_csv('test2.csv')
df = pd.merge(df1, df2, on=['id'])
print(df)
id id2 att1 att2 att3 label att4 att5
0 1 5 20 30 0.2 10 5 6
1 1 5 50 30 0.2 20 5 6
2 1 4 10 30 0.2 90 5 6
3 2 5 20 30 0.2 13 7 8
4 2 5 20 30 0.5 80 7 8
然后这样做:
df.to_csv('merged.csv', index=False)
merged.csv:
id,id2,att1,att2,att3,label,att4,att5
1,5,20,30,0.2,10,5,6
1,5,50,30,0.2,20,5,6
1,4,10,30,0.2,90,5,6
2,5,20,30,0.2,13,7,8
2,5,20,30,0.5,80,7,8
如果你想用Talend来解决这个问题,很简单。您只需要为每个输入文件一个 tFileInputDelimited,一个 tMap,选择“first.csv”作为主流,第二个作为查找。然后你加入“id”列(左连接)并在输出中拉出你想要的字段(tFileOutputDelimited)。经典 tMap 用法。