读取csv文件的一对多关系

时间:2017-06-06 23:02:03

标签: javascript java python excel csv

我有2个csv文件,其中一个看起来像这样:

summary, key, pID, Name, ID
xsajssad, abc123, 1234, p1, 12345678
yasdnalskdj, babc123, 234, p1, 312345678
zsadkmas, cabc123, 3234, p1, 212345678

我的其他csv文件如下所示:

link
file://doc/312345678/document1.doc
file://doc/312345678/document2.doc
file://doc/12345678/document3.doc
file://soc/12345678/document1.doc
file://doc/12345678/document2.doc
file://doc/212345678/document112983.doc

我想要的是改变我的第一个csv文件被放置到corressponding ID。 ID嵌入在文件链接中需要映射回文件1中的唯一ID。这是一对多关系,但我想创建一个新行来匹配第一个文件中的许多匹配。

summary, key, projectID, projectName, ID, link
xsajssad, abc123, 1234, p1, 12345678, file://doc/12345678/document3.doc
xsajssad, abc123, 1234, p1, 12345678, file://doc/12345678/document1.doc
xsajssad, abc123, 1234, p1, 12345678, file://dpc/12345678/document2.doc
yasdnalskdj, babc123, 234, p1, 312345678, file://doc/312345678/document1.doc
yasdnalskdj, babc123, 234, p1, 312345678, file://doc/312345678/document2.doc
zsadkmas, cabc123, 3234, p1, 212345678, file://doc/212345678/document112983.doc

最有效的方法是什么?

2 个答案:

答案 0 :(得分:0)

首先读取文件路径cvs文件,并保存到内存中,然后关闭读取(调用此数据集1)。

然后读取其他cvs文件,做同样的事情(数据集2)。

然后,遍历数据集1,对于每个id,从数据集2中选择数据,然后插入到新文件中。

当循环数据集1完成时。删除原始文件,并重命名新文件 - 从用户的角度看,它看起来好像只是修改了它。

这是一种比修改更简单的方法,因为插入和修改行需要的逻辑比必要的多。

答案 1 :(得分:0)

熊猫可能是最好的工具:

import pandas as pd

读取第一个文件并声明id索引。然后阅读第二个文件:

df1 = pd.read_csv('1.csv', sep=',\s*').set_index('ID')     
df2 = pd.read_csv('2.csv')

从文件名中提取数字ID,并将其设置为第二个数据帧的索引:

df2.index = df2.link.str.split('/').str[3].astype(int)

按索引加入两个表并将索引转换回列:

result = df1.join(df2).reset_index()
result.to_csv('1.csv') # Once you do this, the original contents of 1.csv is gone!