我有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
最有效的方法是什么?
答案 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!