我有两个csv文件与一些1k的条目,每个像这样:
#1.csv
Org,Address,Phone
George, 121 faraday street, 837-837
Newton, 837 Bohr Street, 8327-837
...
#2.csv
Org,location,course
George William, Paris, Engineering
P Newton, London, Arts
...
基本上,2.csv的第1列包含1.csv的第1列中的名称的一些细微变化(主要是打字错误)。
我希望生成如下所示的输出(将相应的location元素从2.csv添加到1.csv):
#result.csv
Org,Address,Phone
George, 121 faraday street, 837-837, Paris
Newton, 837 Bohr Street, 8327-837, London
...
当然,匹配不会是完美的,因为它可能是模糊的,但我想知道什么是最好的方法来处理这一点。bash或python都可以,因为目标系统有这些。
我当时的想法是逃跑:
for i in entry:
<match i to all entries on 2.csv>
<get matching row>
<add row to column>
但是我怎么能做到呢?因为我不知道什么是最好的匹配方式。
1条答案
按热度按时间6yoyoihd1#
正如一些人所说,fuzzy匹配的含义是(* 请原谅双关语 *)模糊的!
只要file 1中的surnames是唯一的,也就是说 * 任何给定的姓只有一行 ,这就能满足您的需要。
假设file 1只有surname,而您要匹配的是file 2中一组不是“ambiguous”的名称( 既用作名字也用作姓氏的名称没有交叉 *),那么此脚本中实现的逻辑将为您提供一个解决方案。
正如一些人所说,如果您在file 1 * 中的姓氏可以与file 2 * 中的姓氏或名字匹配,而您不希望这样,那么您必须添加逻辑来拆分file 2的第一个字段,并检查所需的元素以与file 1的姓氏匹配。
脚本:
输出(dbg=1):