0

我有两个 csv 数据文件,其中每一行都有一个 100% 唯一的元素(注意行的顺序不同)例如

CSV1

title1,title2,title3,UniqueElment,title4,title5
data,data,data,dasasd1245,data,data
data,data,data,dasasd1395,data,data
data,data,data,dasasd2594,data,data
data,data,data,dasasd9587,data,data

CSV2

titlea,titleb,titlec,titled,titlee,titlef,UniqueElment,titleg,titleh,titlei
text,text,text,text,text,text,dasasd1245,text,text,data
text,text,text,text,text,text,dasasd2594,text,text,data
text,text,text,text,text,text,dasasd1395,text,text,data
text,text,text,text,text,text,dasasd9587,text,text,data

期望的输出:

title1,title2,title3,UniqueElment,title4,title5,titlea,titleb,titlec,titled,titlee,titlef,UniqueElment,titleg,titleh,titlei
data,data,data,dasasd1245,data,data,text,text,text,text,text,text,dasasd1245,text,text,data
data,data,data,dasasd1395,data,data,text,text,text,text,text,text,dasasd1395,text,text,data
data,data,data,dasasd2594,data,data,text,text,text,text,text,text,dasasd2594,text,text,data
data,data,data,dasasd9587,data,data,text,text,text,text,text,text,dasasd9587,text,text,data

我需要创建一个最终的 CSV,其中来自两个 csv 的数据基于匹配 UniqueElement 合并在一起。

4

1 回答 1

7

有人可能会写一个csv基于 - 的答案,所以我将给出pandas比较的方法:

df1 = pd.read_csv("file1.csv")
df2 = pd.read_csv("file2.csv")
merged = df1.merge(df2, on="UniqueElment")
merged.to_csv("merged.csv", index=False)

产生

$ cat merged.csv 
title1,title2,title3,UniqueElment,title4,title5,titlea,titleb,titlec,titled,titlee,titlef,titleg,titleh,titlei
data,data,data,dasasd1245,data,data,text,text,text,text,text,text,text,text,data
data,data,data,dasasd1395,data,data,text,text,text,text,text,text,text,text,data
data,data,data,dasasd2594,data,data,text,text,text,text,text,text,text,text,data
data,data,data,dasasd9587,data,data,text,text,text,text,text,text,text,text,data

如果,正如@beroe 所指出的那样,您想要冗余UniqueElment列,那也很容易——我们只需对两者进行排序以确保它们的顺序相同,然后将它们连接起来:

df1 = df1.sort("UniqueElment").reset_index(drop=True)
df2 = df2.sort("UniqueElment").reset_index(drop=True)
merged = pd.concat([df1, df2], axis=1)

或者,我们可以将索引设置为UniqueElment并合并等,这对于数据中的错误会更加稳健。关键是,像这样的操作只需要几行左右。

于 2013-10-19T03:03:07.520 回答