目录

一、问题描述

二、运用方法

三、代码编写

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表格

五、总结

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

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

  1. 【办公效率篇】将全校所有学生成绩的Excel总表,按名字拆分为数个单独的Excel表点对点地发送给每个学生

    不管是工资条还是考试成绩,出于保护隐私的善意,一般不会以公示所有人明细的方式进行信息传达,而是以点对点的方式,一一将个人信息告诉每个相应的员工或学生. 这里以考试成绩举例,教大家将全校所有学生成绩的E ...

  2. Python从入门到精通 - 入门篇 (下)

    上一讲回顾:Python从入门到精通 - 入门篇 (上) 接着上篇继续后面两个章节,函数和解析式. 4 函数 Python 里函数太重要了 (说的好像在别的语言中函数不重要似的).函数的通用好处就不用 ...

  3. Excel数据合并到统计分析自动处理的python示例(精益办公实战1)

    Excel数据合并到统计分析自动处理的python示例(精益办公实战1) 1.背景描述: 社会的发展不断深化了经济对科技和数字化的依赖,企业将不得不面对越来越多,甚至是海量的数据和信息.Excel(或 ...

  4. Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...

  5. python自动化_Python 实现Excel自动化办公上

    今天的文章分享Python 如何轻松操作Excel 这款office 办公软件的,在Python 中你要针对某个对象进行操作,是需要安装与其对应的第三方库的,这里对于Excel 也不例外,它也有对应的 ...

  6. Excel 数据的统计分析及绘图自动处理的python示例(精益办公实战2)

    Excel 数据统计分析及绘图的自动处理python示例(精益办公实战2) 1.背景描述: "看数不如看表,看表不如看图" 2.数据准备和任务要求: 数据准备 一份已经经过数据清洗 ...

  7. excel数据导入python后不对齐_Python处理Excel文件的实用姿势

    真正的勇士,敢于直面银行卡上的余额,敢于正视磅秤上的数字. 表格数据是最常见的数据类型,Excel是日常办公中最常接触的文件. 上一章提过Python可以通过openpyxl模块处理Excel文件. ...

  8. 【PDF】超简单!用Python让Excel自动化办公

    Excel作为当今最流行的办公软件之一,在数据编辑.处理和分析方面的表现都非常出色.但是,即使有 Excel的帮助,在面对重复性.机械性的事务时仍然要花费大量时间. 所以今天了解一下这本<超简单 ...

  9. python series转置储存到excel_Python 实现Excel自动化办公下

    上一讲我们讲到了Python 针对Excel 里面的特殊数据处理以及各种数据统计,本讲我们将引入Pandas 这个第三方库来实现数据的统计,只要一个方法就可以统计到上一讲的数据统计内容,本讲也会扩展讲 ...

最新文章

  1. Objective C浅拷贝和深拷贝
  2. 将NetBIOS名称解析为IP地址的常用方法
  3. C++对象模型4——多重继承的对象内存模型、vptr与vtbl的创建与重置的时机、不要在含有虚函数的类的构造函数中调用memset
  4. MySQL优化学习总结
  5. 石家庄地铁查询PSP0级
  6. ​【Python】Python中的经典时间序列预测模型总结
  7. 保持你的决心——《传说之下》背后的设计之道
  8. linux打包/解压-tar
  9. vue 日期面板_VUE项目中如何方便的转换日期和时间
  10. Redhat7.2下编译rpm包的形式安装openvswitch
  11. 【JavaAndroid开源库代码剖析】のandroid-smart-image-view
  12. Python(七)Socket编程、IO多路复用、SocketServer
  13. 根据单词列表通过网络下载单词发音
  14. multi-key map passed in for ordered parameter sort
  15. artDialog对话框组件使用方法
  16. Python 为何能坐稳 AI 时代头牌语言
  17. mysql分组后,取每组第一条数据
  18. Nvidia GPU信息nvidia-smi(Persistence-M持久性内存、Volatile Uncorr. ECC显存错误校正、GPU-Util显卡利用率、Compute M.显卡计算模式)
  19. msys2在windows10系统的安装
  20. carla学习笔记(六)

热门文章

  1. JavaScript 心灵鸡汤
  2. 全民运动,MOVE开启运动元宇宙新生态
  3. python怎么运行ipynb文件_如何运行.ipynb文件的图文讲解
  4. 用Java语言计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
  5. 【电脑运用及修理】浏览器统计操作系统统计屏幕分辨率统计移动设备统计
  6. java 数字水印_用JAVA实现数字水印(可见)
  7. 将PDF转Word工具看做武侠人物,最后一个被认为最强
  8. Gartner 2020 战略技术趋势- Hyper 自动化
  9. DenseNet重点介绍和源码分享
  10. aes 256 cbc java,AES256加解密java语言实现