从两个单独的文件创建合并的CSV,按唯一列进行匹配

时间:2013-10-19 02:55:45

标签: python python-2.7 csv merge element

我有两个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,其中两个csvs的数据根据​​匹配的UniqueElement合并在一起。

1 个答案:

答案 0 :(得分:8)

有人可能会写一个基于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并合并等,这对于数据中的错误会更加健壮。关键是,像这样的操作只需要几行左右。