问题描述
我正在尝试从两个csv文件创建一个数据集; 第一个csv文件具有更多属性(id,att1,att2,att3,标签) 第二个与第一个具有ID(id,att4,att5)
我正在尝试合并这些文件,而不对属性值进行分组,例如,第一个csv文件:
id,att1,att2,att3,label
1,5,20,30,0.2,10
2,13
1,50,20
2,0.5,80
1,4,10,90
1....
5....
3...
5....
第二个csv:
id,att4,att5
1,6
2,7,8
3,2
4,1,9
5,.....
结果:
id,label,13,8
1,80,90,6
1....
5....
3...
5....
请使用Talend,我真的尝试了很多可能性,是否有办法使用python(我是python的新手)
解决方法
您的第一个csv有问题,标题中只有5列,而数据行中只有6列。我将其更改为:
第一个csv:
id,id2,att1,att2,att3,label
1,5,20,30,0.2,10
2,13
1,50,20
2,0.5,80
1,4,10,90
第二个csv:
id,att4,att5
1,6
2,7,8
3,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,label,6
1,90,13,8
2,80,8
,
如果要使用Talend解决此问题,这很容易。您需要为每个输入文件提供一个tFileInputDelimited,一个tMap,选择“ first.csv”作为主要流程,第二个作为查找。然后,在“ id”列上进行联接(左联接),并在输出中提取所需的字段(tFileOutputDelimited)。经典的tMap用法。