Javascript 读取csv文件一对多关系
我有两个csv文件,其中一个看起来像这样:Javascript 读取csv文件一对多关系,javascript,java,python,excel,csv,Javascript,Java,Python,Excel,Csv,我有两个csv文件,其中一个看起来像这样: summary, key, pID, Name, ID xsajssad, abc123, 1234, p1, 12345678 yasdnalskdj, babc123, 234, p1, 312345678 zsadkmas, cabc123, 3234, p1, 212345678 link file://doc/312345678/document1.doc file://doc/312345678/document2.doc file://
summary, key, pID, Name, ID
xsajssad, abc123, 1234, p1, 12345678
yasdnalskdj, babc123, 234, p1, 312345678
zsadkmas, cabc123, 3234, p1, 212345678
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文件如下所示:
summary, key, pID, Name, ID
xsajssad, abc123, 1234, p1, 12345678
yasdnalskdj, babc123, 234, p1, 312345678
zsadkmas, cabc123, 3234, p1, 212345678
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文件更改为相应的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
最有效的方法是什么?首先读取filepath cvs文件,保存到内存中,然后关闭读取(将此数据集称为1) 然后读取另一个cvs文件,执行相同的操作(数据集2) 然后,遍历数据集1,对于每个id,从数据集2中选择数据,并插入到新文件中 当通过数据集1的循环完成时。删除原始文件,并重命名新文件-从用户的角度来看,这看起来就像您只是修改了它
这是一种比修改更简单的方法,因为插入和修改行需要更多的逻辑。熊猫可能是最简单的工具:
import pandas as pd
读取第一个文件并声明索引。然后读取第二个文件:
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!
如何知道第一个文件和第二个文件中的哪些行是配对的?通过嵌入在文件LIKI中间的唯一ID来获得这个错误:PANATAS.Error。PARSERORACLE:行18中预期的1个字段,SAW 2。当使用多字符分隔符时,可能会确保忽略引号。脚本希望第一个文件列之间用两个或更多空格分隔。如果不正确,则必须指定分隔符。脚本还希望第二个文件只有一列。第一个csv用逗号分隔,因此我更改了sep=“,”,但现在运行它时,我收到了以下错误:UnicodeDecodeError:“utf-8”编解码器无法解码位置3中的字节0x83:无效的起始字节请在您的问题中包含该文件的实际示例,包括导致错误的同一个文本。因此,不再显示错误,但任何文件中都没有任何更改好的,我喜欢这个计划,最初考虑过这个,现在在python中尝试