python 模糊匹配比较_Python模糊匹配(FuzzyWuzzy)-仅保留最佳匹配

本文介绍了如何使用Python的FuzzyWuzzy库进行模糊匹配,特别是针对两个CSV文件中名称列的比较。作者展示了如何创建查找字典,计算相似度得分,并从结果中筛选出超过60%匹配度的项。目标是只保留每个名称的最佳匹配项,即第二列中的最高得分。目前的脚本输出所有匹配,作者寻求帮助以修改脚本以删除重复名称并仅显示最高得分的匹配。
摘要由CSDN通过智能技术生成

我试图模糊匹配两个csv文件,每个文件包含一列名称,它们相似但不相同。

到目前为止,我的代码如下:

import pandas as pd

from pandas import DataFrame

from fuzzywuzzy import process

import csv

save_file = open('fuzzy_match_results.csv', 'w')

writer = csv.writer(save_file, lineterminator = '\n')

def parse_csv(path):

with open(path,'r') as f:

reader = csv.reader(f, delimiter=',')

for row in reader:

yield row

if __name__ == "__main__":

## Create lookup dictionary by parsing the products csv

data = {}

for row in parse_csv('names_1.csv'):

data[row[0]] = row[0]

## For each row in the lookup compute the partial ratio

for row in parse_csv("names_2.csv"):

#print(process.extract(row,data, limit = 100))

for found, score, matchrow in process.extract(row, data, limit=100):

if score >= 60:

print('%d%% partial match: "%s" with "%s" ' % (score, row, found))

Digi_Results = [row, score, found]

writer.writerow(Digi_Results)

save_file.close()

输出如下:

Name11 , 90 , Name25

Name11 , 85 , Name24

Name11 , 65 , Name29

该脚本工作正常。输出是预期的。但是我所寻找的只是最佳的匹配。

Name11 , 90 , Name25

Name12 , 95 , Name21

Name13 , 98 , Name22

因此,我需要基于第2列中的最大值,以某种方式删除第1列中的重复名称。这应该相当简单,但是我似乎无法弄清楚。任何帮助,将不胜感激。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值