Heim  >  Artikel  >  Backend-Entwicklung  >  So klassifizieren Sie den Inhalt von zwei Excel-Tabellen mithilfe des Python-Fuzzy-Matching-Algorithmus

So klassifizieren Sie den Inhalt von zwei Excel-Tabellen mithilfe des Python-Fuzzy-Matching-Algorithmus

王林
王林nach vorne
2023-05-28 08:43:111519Durchsuche

    1. Problembeschreibung

    Während des Praktikums ist es notwendig, die Inhalte der beiden Tabellen abzugleichen und einzuordnen, B. zwei verschiedene Ingenieurprojekte, die auf Objekte A abzielen, daher müssen diese beiden Ingenieurprojekte in A klassifiziert werden. Es gibt eine ganze Reihe von Ingenieurprojekten und Bauobjekten unter ihnen, daher habe ich darüber nachgedacht, ein Programm zu schreiben, das sie automatisch zusammenfassen kann viel Arbeit.

    2. Anwendungsmethode

    Da die beiden Tabellen ähnliche Schlüsselwörter haben, ist der Inhalt einer Tabelle Projekt A und der Inhalt der anderen Tabelle Projekt A . Einheit A, dann muss ich das Schlüsselwort „A“ darin finden, um es herauszufiltern. Bei diesem Problem habe ich einen Fuzzy-Matching-Algorithmus verwendet, um mein Ziel zu erreichen, aber dieser Algorithmus ist nicht die einzig mögliche Lösung.

    3. Code schreiben

    Hinweis: Hier haben wir die Difflib-Bibliothek für die Verwendung des Fuzzy-Matching-Algorithmus importiert; 3.1

    Zuerst importieren wir die beiden Excel-Tabellen, die verarbeitet werden müssen.

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

    So klassifizieren Sie den Inhalt von zwei Excel-Tabellen mithilfe des Python-Fuzzy-Matching-Algorithmus Der Inhalt und die Form der beiden Tabellen sind ungefähr wie oben. Meine Anforderung besteht darin, die mit diesen beiden Tabellen verbundenen Ingenieurprojekte abzugleichen und zu klassifizieren.

    3.2

    Fügen Sie dann die beiden Datenspalten, die wir verarbeiten möchten, in eine Liste ein.

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

    3.3

    Verwenden Sie den Fuzzy-Matching-Algorithmus, um den Dateninhalt in Liste2 nacheinander mit dem Dateninhalt in Liste1 abzugleichen.

    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)

    Es ist zu beachten, dass hier die Methode get_close_matches(query_word,list1,n,cutoff) in der Difflib-Bibliothek aufgerufen wird, wobei query_word die übereinstimmende Zeichenfolge ist; list1 ist das abzugleichende Zeichen list; n ist die Rückgabe der besten n Übereinstimmungen, ich setze sie auf 1; Cutoff ist der Übereinstimmungsgrad, der eine Gleitkommazahl in [0,1] ist, die auch als Ähnlichkeitsgrad zwischen den beiden bezeichnet werden kann Dies hängt von den persönlichen Bedürfnissen und spezifischen Problemen ab. Ich habe den Ähnlichkeitsgrad auf 0,42 festgelegt, wodurch der Inhalt der beiden Tabellen, die ich abgleichen muss, erfolgreich übereinstimmen kann.

    Da jedes von res übereinstimmende Ergebnis in Form einer Liste vorliegt und wir die Ergebnisse in eine neue Tabelle schreiben möchten, benötigen wir die Ergebnisse in Zeichenfolgenform, daher verwenden wir res="". join Die (res)-Methode konvertiert die Liste in String-Form und fügt das Ergebnis dann in String-Form in die listx-Liste ein, um das Schreiben in eine neue Excel-Tabelle zu erleichtern.

    3.4

    Da ich befürchtete, dass passende Ergebnisse fehlen würden, habe ich den Dateninhalt in Liste1 nacheinander mit dem Dateninhalt in Liste2 abgeglichen.

    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)

    Zu diesem Zeitpunkt habe ich die übereinstimmende Zeichenfolge auf die Zeichenfolge in Liste1 und die abzugleichende Zeichenfolgenliste auf Liste2 festgelegt. Die anderen Parameter sind dieselben, was der Aussage entspricht, dass ich sie zuerst verwende Tabelle 1, um Form 2 abzugleichen, und dann Form 2 verwenden, um Form 1 abzugleichen, damit das fehlende Problem besser gelöst werden kann.

    3.5

    Legen Sie abschließend die Parameter der neuen Excel-Tabelle fest.

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

    Die hier verwendete Methode zum Schreiben von Dateninhalten in die Excel-Tabelle ist genau das Weitere Einführung: Personen mit etwas Erfahrung im Umgang mit Excel können die Bedeutung des Codes leicht verstehen.

    Das endgültige Ausgabetabellenformat ist wie folgt:

    So klassifizieren Sie den Inhalt von zwei Excel-Tabellen mithilfe des Python-Fuzzy-Matching-Algorithmus Durch zwei Übereinstimmungen, die eine mit einem hohen Grad an gegenseitiger Übereinstimmung wird entsprechend in der Tabelle angezeigt, und wenn es nur einen einzigen hohen Übereinstimmungsgrad gibt, sind links Daten, aber rechts keine Daten vorhanden, oder es sind rechts Daten, aber links keine Daten vorhanden.

    4. Codesammlung

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

    Das obige ist der detaillierte Inhalt vonSo klassifizieren Sie den Inhalt von zwei Excel-Tabellen mithilfe des Python-Fuzzy-Matching-Algorithmus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen