关于Excel表操作

您所在的位置:网站首页 tableau模糊匹配 关于Excel表操作

关于Excel表操作

#关于Excel表操作| 来源: 网络整理| 查看: 265

Fuzzywuzzy 是一款可以对字符串模糊匹配的工具, 它使用 Levenshtein Distance 来计算出那些易用包中序列之间的差异。

Levenshtein Distance算法,又叫 Edit Distance算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。

本文不对语法做详细介绍,大概思路可以参考下面的图

Fuzzywuzzy主要包括四个函数(方法),分别为:简单匹配(Ratio)、非完全匹配(Partial Ratio)、忽略顺序匹配(Token Sort Ratio)和去重子集匹配(Token Set Ratio)

import pandas as pd import jieba import fuzzywuzzy from fuzzywuzzy import process import datetime # 定义数据表 filename=r'C:\Users\baoqi\Documents\比较清单.xlsx' targetfilename=r'C:\Users\baoqi\Documents\目标文件.xlsx' # --------------------------合同-------------------------------- # 读取A表表格 starttime = datetime.datetime.now() ht_zc_cw = pd.read_excel(filename,sheet_name='A比B多',engine='openpyxl') endtime = datetime.datetime.now() duringtime = endtime - starttime print('1、A比B多 sheet',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime) # 读取B表表格 starttime = datetime.datetime.now() ht_cw_zc = pd.read_excel(filename,sheet_name='B比A多',engine='openpyxl') endtime = datetime.datetime.now() duringtime = endtime - starttime print('2、B比A多',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime) # 将要查找的数据list化 starttime = datetime.datetime.now() ht_zc_cw_list = ht_zc_cw.Acompfield.to_list() ht_cw_zc_list = ht_cw_zc.Bcompfield.to_list() endtime = datetime.datetime.now() duringtime = endtime - starttime print('3、数据进行list化=',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime) # 匹配相关字段名称和阈值,低于90分不显示 starttime = datetime.datetime.now() ht_cw_zc["匹配名称"] = ht_cw_zc.Bcompfield.apply(lambda x: process.extractOne(x, ht_zc_cw_list)[0] if process.extractOne(x, ht_zc_cw_list)[1]>90 else '') ht_cw_zc["匹配阈值"] = ht_cw_zc.Bcompfield.apply(lambda x: process.extractOne(x, ht_zc_cw_list)[1] if process.extractOne(x, ht_zc_cw_list)[1]>90 else '') endtime = datetime.datetime.now() duringtime = endtime - starttime print('3、匹配名称和阈值=',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime) # 新建一个目标表,将原信息连通匹配信息,一起写入 starttime = datetime.datetime.now() writer = pd.ExcelWriter(targetfilename, mode="a", engine="openpyxl") ht_cw_zc.to_excel(writer,index=False,sheet_name='匹配值') writer.save() writer.close() endtime = datetime.datetime.now() duringtime = endtime - starttime print('4、写入目标文件=',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime)

Fuzzywuzzy的用法比较简单,可以先分词再比对,也可以不分词比对。Fuzzywuzzy适用于小数据集的比对,几百条vs几百条,当数据量上升到上千的时候,速度无法接受,基本上一秒钟可比对上千条记录。

后文会介绍一个更快更准确的模糊匹配工具。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3