【Python处理EXCEL】轻办公实用篇1:通过模糊匹配算法对两个excel表格的内容进行匹配归类

article/2025/9/13 15:18:51

目录

一、问题描述

二、运用方法

三、代码编写

3.1

3.2

3.3

3.4

3.5

四、代码集合


一、问题描述

在实习的时候,需要将两个表格的内容进行匹配分类,比如两个不同的工程项目针对的对象都是A,那么就需要将这两个工程项目归类到A当中,而这当中的工程项目和施工对象数量都还挺多的,因此想着写个程序来自动将它们归类起来,这样可以减少很大一部分的工作量。

二、运用方法

由于两个表格中拥有相似的关键词,即一个表格的内容形式为为A工程项目,另一个表格的内容形式为A单位,那么我就需要将其中的“A”这个关键词相匹配就能够筛选出来了。能够达到目的的程序写法有不少,而我在这次的问题中选择了通过模糊匹配的算法来实现该功能。

三、代码编写

注:这里我们导入了difflib库,用于使用模糊匹配算法;xlwt库,用于导出excel表格

3.1

首先我们导入两个需要处理的excel表格。

df1=pd.read_excel(r'D:\杂货\项目.xlsx',sheet_name='Sheet1')
df2=pd.read_excel(r'D:\杂货\项目2.xlsx',sheet_name='Sheet1')#导入两个需要处理的excel表格

 两个表格的内容形式大致如上。而我的需求是将这两个表格相关的工程项目匹配归类。

导入方法不再赘述,详见:

https://blog.csdn.net/Deng333333555/article/details/125092526?spm=1001.2014.3001.5501

3.2

再将我们所要处理的两列数据放入一个列表当中。

for i in df1['XXXXXX改造']:#将这两列的数据存入list1和list2两个列表中list1.append(i)
for j in df2['XXXXXX新改']:list2.append(j)

3.3

通过模糊匹配算法,将list2中的数据内容与list1中的数据内容一一匹配。

for n in range(len(list2)):#通过模糊匹配算法,将list2与list1中的数据一一匹配,设置近似度为42%,得到匹配结果resquery_word=str(list2[n])res=difflib.get_close_matches(query_word,list1,1,cutoff=0.42)res = "".join(res)listx.append(res)

需要注意的是,该处调用了difflib库中的get_close_matches(query_word,list1,n,cutoff)方法,其中的query_word为被匹配的字符串;list1为要匹配的字符串列表;n为前topn个最佳匹配反回,我将其设置为1;cutoff为匹配度大小,为[0,1]的浮点数,也可以称为两者的相似程度,这个就看个人需求和具体问题来设置,我将其相似程度设置为0.42则恰好能够将我所需要匹配的两个表格的内容都匹配成功。

由于res匹配出来的每一个结果都是是列表的形式,而我们想要将结果写入新的表格当中需要字符串形式的结果,因此使用res=””.join(res)方法将列表转换为字符串的形式,然后将字符串形式的结果放入listx列表当中,以便于写入新的excel表格。

3.4

由于担心会存在匹配结果遗漏的情况出现,因此我又将list1中的数据内容与list2中的数据内容一一匹配。

for m in range(len(list1)):#同上,将list1与list2的数据一一匹配query_word=str(list1[m])res=difflib.get_close_matches(query_word,list2,1,cutoff=0.42)res="".join(res)listy.append(res)

这时我将被匹配的字符串设置为list1中的字符串,要匹配的字符串列表设置为list2,其他参数一样,相当于说我先用表格1去匹配表格2,再用表格2去匹配表格1,这样就能够较好地解决遗漏的问题。

3.5

最后设置好新的excel表格的参数

workbook=xlwt.Workbook(encoding='utf-8')#设定好新的excel表格的参数
worksheet=workbook.add_sheet('test_sheet')
worksheet.write(0,0,label='XXX改造')#从第0行第0列开始输入标签为XXX改造的数据
worksheet.write(0,1,label='XX金额')#从第0行第1列开始输入标签为XX金额的数据
worksheet.write(0,2,label='XXX新改')
worksheet.write(0,3,label='XX金额')
worksheet.write(0,4,label='已XXX金额')for i in range(len(listx)):#写入运算出来的数据worksheet.write(i+1,0,label=listx[i])
for j in range(len(listy)):worksheet.write(j+1,2,label=listy[j])
for k in range(len(list1)):worksheet.write(k+1,1,label=list3[k])
for l in range(len(list2)):worksheet.write(l+1,3,label=list4[l])worksheet.write(l+1,4,label=list5[l])
workbook.save(r'D:\杂货\新项目6.xls')#导出excel表格

这里使用的向excel表格中写入数据内容的方法就不过多介绍,对于有一定处理excel经验的人能够很容易理解代码的含义。

最后输出的表格形式如下:

 通过两遍匹配,两者相互匹配度都高的则会出对应地出现在表格中,而只有单一匹配度高的,则出现了左边有数据右边没有数据,或者右边有数据左边没有数据的情况。

四、代码集合

import pandas as pd
import difflib
import xlwt#导入库df1=pd.read_excel(r'D:\杂货\项目.xlsx',sheet_name='Sheet1')
df2=pd.read_excel(r'D:\杂货\项目2.xlsx',sheet_name='Sheet1')#导入两个需要处理的excel表格list1=[]#设置空列表,用于存储2017年一列的数据
list2=[]#用于存储2018年一列的数据
list3=list(df1['XX金额'])#将excel表格中的列数据列表化
list4=list(df2['XX金额'])
list5=list(df2['XXX金额'])
listx=[]#用于存储匹配结果的数据
listy=[]#同上
for i in df1['XXXXXXXXX改造']:#将这两列的数据存入list1和list2两个列表中list1.append(i)
for j in df2['XXXXXXXXXXXXX新改']:list2.append(j)for n in range(len(list2)):#通过模糊匹配算法,将list2与list1中的数据一一匹配,设置近似度为42%,得到匹配结果resquery_word=str(list2[n])res=difflib.get_close_matches(query_word,list1,1,cutoff=0.42)res = "".join(res)listx.append(res)for m in range(len(list1)):#同上,将list1与list2的数据一一匹配query_word=str(list1[m])res=difflib.get_close_matches(query_word,list2,1,cutoff=0.42)res="".join(res)listy.append(res)workbook=xlwt.Workbook(encoding='utf-8')#设定好新的excel表格的参数
worksheet=workbook.add_sheet('test_sheet')
worksheet.write(0,0,label='XXXXXXXXX改造')
worksheet.write(0,1,label='XX金额')
worksheet.write(0,2,label='XXXXXXXXXXX新改')
worksheet.write(0,3,label='XX金额')
worksheet.write(0,4,label='XXX金额')for i in range(len(listx)):#写入运算出来的数据worksheet.write(i+1,0,label=listx[i])
for j in range(len(listy)):worksheet.write(j+1,2,label=listy[j])
for k in range(len(list1)):worksheet.write(k+1,1,label=list3[k])
for l in range(len(list2)):worksheet.write(l+1,3,label=list4[l])worksheet.write(l+1,4,label=list5[l])
workbook.save(r'D:\杂货\新项目6.xls')#导出excel表格

五、总结

本篇的重点在于使用了模糊匹配的算法,并且介绍该算法的使用才是本篇的目的。其他的内容则是用于辅助介绍该算法。


http://chatgpt.dhexx.cn/article/nV85CKma.shtml

相关文章

python 模糊匹配字符串 excel,python pandas模糊匹配Excel指定指标 python pandas模糊匹配 读取Excel后 获取指定指标的操作...

想了解python pandas模糊匹配 读取Excel后 获取指定指标的操作的相关内容吗,D_grey在本文为您仔细讲解python pandas模糊匹配Excel指定指标的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,pandas,模糊匹配,读取Excel,指定指标,下面大家一起来学习吧。 1.首…

wps中excel如何实现模糊搜索匹配的内容(可以匹配想要的各种格式)

1,在某一列进行搜索-筛选搜索-如包含“XXX信息XX公司XX”这种格式的。 输入 :信息*公司 (1)选择第一种搜索方式代表寻找符合条件: 包含信息和公司两个关键字, 且信息在前公司在后, 且两个词语之…

【如何使用Excel进行两表之间模糊匹配查找】

在特殊情况下,A表中表示人名字段的内容只是包含名字,B表中表示人名字段包含姓和名字,如A表:yinxu ,B表:li yinxu ,我们认为是同一个人,如何通过Excel更好的匹配出来呢? &#xff0…

excel部分字段相同模糊匹配

一、提出问题 你要么获取一批数据,然后根据它提问,或者先提问,然后根据问题收集数据。在这两种情况下,好的问题可以帮助你将精力集中在数据的相关部分,并帮助你得出有洞察力的分析。 二、理解数据 1、理解各字段的意思,如果有英文可修改成中文更易理解。 2、在数据清洗…

excel模糊匹配sql server数据库

假如数据库中已经有数据了 步骤1 在Excel表格中新建一页表格用于存储数据库的数据 步骤2 将待输入数据的表格与数据库关联 步骤3 在表格启动时,将表格与数据库进行关联 注意:一定要在ThisWorkbook的Workbook_open()方法中实现。 附上代码&#x…

Excel技巧:模糊匹配包含项

公式:VLOOKUP("*"&B2&"*",M:M,1,0) // 待查找的元素中前后 加*, 表示匹配含该元素 案例:

Excel模糊匹配相同内容的数据求和,使用SUMIF函数

看到朋友在对Excel表格数据进行机械操作,想到excel应该是个很强大的应用,这些机械操作应该可以通过函数简化操作的,于是不正经的研究下。 首先我们上图: 简单的需求,把每个店铺的每个月充值分别是200,500,1000,1500,2…

Excel之vlookup函数的模糊匹配和精准匹配

先复习一下,在Excel单元格中输入“Vlookup”提示如下 VLOOKUP(lookup_value,table_array,col_index_num.[range_lookup])其表达的意思为:Vlookup(查找的值,查找的区域,查找的数据所在的列,精确匹配/模糊匹配) 其中精准配相信大家都…

Excel模糊匹配

方法一: LOOKUP(1,0/FIND(A1,B2:C5),B2:C5) —A1,要查找的字符串 ; B2:C5可以是一个单元格 情形一:基于列1的值,在列2中模糊查找,如果有,则返回列2中找到的值 情形二:基于列1的值,在列2中模糊查找&#x…

关于Excel表操作-通过Fuzzywuzzy实现模糊匹配

Fuzzywuzzy 是一款可以对字符串模糊匹配的工具, 它使用 Levenshtein Distance 来计算出那些易用包中序列之间的差异。 Levenshtein Distance算法,又叫 Edit Distance算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次…

【操作篇】Excel中如何自定义搜索(模糊匹配)不再需要一个个勾选l啦!

在Excel筛选下,可以在每个项目前勾选选择项,如果勾选项有上万上千个,难道要从万千个选项种一个个挑出来筛选吗? 当然不必,学会通配符,按照自己想要的方式进行查找。 通配符用法(表示)“”&am…

【Excel高效工作3】VLOOKUP函数实例使用(二):精确匹配进阶——反向查找,多条件查找 / 模糊匹配的使用

本章内容: 上一章用实例展示了VLOOKUP函数最基本的功能:精确匹配 的基础用法。然而,实际工作中对我们提出的需求会更高,面对某些更加复杂的情况,我们可能需要对Excel表格数据先进行预处理,再使用VLOOKUP函…

fastadmin使用editable实现行内编辑无刷新效果

记录:fastadmin使用editable实现行内编辑无刷新效果。 一、下载资源 editable资源下载地址 二、放在如下目录 三、引入并应用 代码示例: require.config({paths: {editable: ../libs/bootstrap-table/dist/extensions/editable/bootstrap-table-edit…

editable type支持function实现不同行type分别为select、text

bootstrap table一般注重一列中所有行都是一个处理方式,很少对应有同一列不同行要处理成不同的形式。但是formate啊,index啊,这些倒是随着行变化。 那么结合x-editable呢,它本身type只支持text,select等string&#x…

《Flutter 控件大全》第九十六:TextField、EditableText、TextInput

如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。EditableText EditableText是一…

fastadmin中使用 x-editable

fastadmin中的表格使用的是 bootstarp-table的插件, 其中 没有看到它集成 x-editable , x-eidtable 插件可以允许用户直接在表格的字段上去修改数据, 这个功能还是很方便的, 那么我们怎么去让fastadmin也拥有这样的功能呢? 网上有一个分享方法,很好的, 我在这里做一下记录, 不…

bootstrap X-editable使用。

x-editable英文官网 参考 – 中文文档 demo 需求:如下图所示,我想要在点击 高于20 时,弹出框内只显示20(弹出框做数字验证)。修改为50后点击对号保存。表格内的高于20 变为 高于50 。 最终效果如下图: 修…

bootstrapTable行内编辑----X-editable组件

阅读目录 一、x-editable组件介绍二、bootstrapTable行内编辑初始方案三、bootstrapTable行内编辑最终方案 1、文本框2、时间选择框3、下拉框4、复选框5、“阴魂不散”的select2 四、总结 正文 前言:之前介绍bootstrapTable组件的时候有提到它的行内编辑功能&#x…

android editable接口,Spannable与Editable区别

在看TextView源码时候又看到了这两个接口:Spannable和Editable; 之前一直没有认真研究过两者的关系,现在看了源码记录下来。 1:两者属于继承关系,Editable继承于Spannable Editable: Spannable: 相较于Spa…

editable组件_表格行内编辑事件

1.简介 x-editable组件是一个适用于bootstrap(目前只更新到bootstrap3),jquery,jquery UI三种风格样式的弹出框编辑插件。本文根据项目需求主要介绍它在bootstrap-tabe中的应用。 x-editable开源地址:https://github.com/vitalets…