亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

通過python模糊匹配算法對兩個excel表格內容歸類

 更新時間:2023年03月22日 15:57:00   作者:二十六夜.  
這篇文章主要介紹了通過python模糊匹配算法對兩個excel表格內容歸類,比如兩個不同的工程項目針對的對象都是A,那么就需要將這兩個工程項目歸類到A當中,可以減少很大一部分工作量,,需要的朋友可以參考下

一、問題描述

在實習的時候,需要將兩個表格的內容進行匹配分類,比如兩個不同的工程項目針對的對象都是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表格歸類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python垃圾回收機制(GC)原理解析

    python垃圾回收機制(GC)原理解析

    這篇文章主要介紹了python垃圾回收機制(GC)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • pycharm快捷鍵匯總

    pycharm快捷鍵匯總

    本文給大家分享的是PyCharm開發(fā)工具的快捷鍵大全整理,非常詳細,適合使用PyCharm作為開發(fā)工具的開發(fā)人員參考使用,能夠幫助提高開發(fā)效率和速度
    2020-02-02
  • 使用Python的Twisted框架編寫簡單的網絡客戶端

    使用Python的Twisted框架編寫簡單的網絡客戶端

    這篇文章主要介紹了使用Python的Twisted框架編寫簡單的網絡客戶端,翻譯自Twisted文檔,包括一個簡單的IRC客戶端的實現,需要的朋友可以參考下
    2015-04-04
  • python opencv旋轉圖像(保持圖像不被裁減)

    python opencv旋轉圖像(保持圖像不被裁減)

    這篇文章主要為大家詳細介紹了python opencv旋轉圖像,保持圖像不被裁減,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python實現保證只能運行一個腳本實例

    Python實現保證只能運行一個腳本實例

    這篇文章主要介紹了Python實現保證只能運行一個腳本實例,本文直接給出實現代碼,需要的朋友可以參考下
    2015-06-06
  • python實現錄制全屏和選擇區(qū)域錄屏功能

    python實現錄制全屏和選擇區(qū)域錄屏功能

    這篇文章主要介紹了python實現錄制全屏和選擇區(qū)域錄屏功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Python數組拼接np.concatenate實現過程

    Python數組拼接np.concatenate實現過程

    這篇文章主要介紹了Python數組拼接np.concatenate實現過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Python實現socket非阻塞通訊功能示例

    Python實現socket非阻塞通訊功能示例

    這篇文章主要介紹了Python實現socket非阻塞通訊功能,結合實例形式分析了Python使用socket模塊進行非阻塞通訊的原理、多線程及客戶端、服務器端相關實現技巧,需要的朋友可以參考下
    2019-11-11
  • Pytorch實現ResNet網絡之Residual Block殘差塊

    Pytorch實現ResNet網絡之Residual Block殘差塊

    這篇文章主要為大家介紹了Pytorch實現ResNet網絡之Residual Block殘差塊實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Python中的變量和作用域詳解

    Python中的變量和作用域詳解

    這篇文章主要介紹了Python中的變量和作用域詳解的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07

最新評論