合并时保留 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 用法。