我的编程空间,编程开发者的网络收藏夹
学习永远不晚

通过python模糊匹配算法对两个excel表格内容归类

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

通过python模糊匹配算法对两个excel表格内容归类

一、问题描述

在实习的时候,需要将两个表格的内容进行匹配分类,比如两个不同的工程项目针对的对象都是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表格

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

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

如何在Python中导入EXCEL数据

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%,得到匹配结果res
    query_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%,得到匹配结果res
    query_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表格

五、总结

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

到此这篇关于通过python模糊匹配算法对两个excel表格内容归类的文章就介绍到这了,更多相关python模糊匹配算法excel表格归类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

通过python模糊匹配算法对两个excel表格内容归类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

通过python模糊匹配算法对两个excel表格内容归类

这篇文章主要介绍了通过python模糊匹配算法对两个excel表格内容归类,比如两个不同的工程项目针对的对象都是A,那么就需要将这两个工程项目归类到A当中,可以减少很大一部分工作量,,需要的朋友可以参考下
2023-03-22

怎么通过python模糊匹配算法对两个excel表格内容归类

今天小编给大家分享一下怎么通过python模糊匹配算法对两个excel表格内容归类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下
2023-07-05

如何进行Python pandas两个表格内容模糊匹配的实现

如何进行Python pandas两个表格内容模糊匹配的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方法2此方法是两个表构建某一相同字段,然后全连接,
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录