python dataframe 模糊匹配_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列中的重复名称.

它应该是相当简单的,但我似乎无法弄明白.

任何帮助,将不胜感激.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值