Pandas Fuzzy Match

Pandas Fuzzy Match
Fuzzy String Matching ist der Begriff, der den Prozess der Lokalisierung ähnlicher Zeichenfolgen am besten beschreibt. Wir werden die Fuzzywuzzy -Bibliothek nutzen. Trotz eines albernen Namens ist es eine weit verbreitete Bibliothek für die String -Matching. Das FuzzyWuzzy -Paket bietet einige starke Funktionen, die beim Fuzzy -String -Matching hilfreich sind, einschließlich der Berechnung der Levenshtein -Distanz. In diesem Artikel werden wir uns ansehen, wie Sie Python verwenden, um Fuzzy -Übereinstimmungen in der Spalte DataFrame in Pandas durchzuführen. Wir können Übereinstimmungen mit Fuzzy -Matching identifizieren, die Muster im Zielobjekt oder Elemente findet, auch wenn es nicht genau übereinstimmt. Suchmaschinen basieren auf Fuzzy -Matching. Aus diesem Grund erhalten wir jedes Mal, wenn wir einen Suchbegriff in einen Browser eingeben, zahlreiche Empfehlungen oder Vorschläge.

Wie man Fuzzy -Matching in Pandas durchführt?

Verschiedene Funktionen und Eigenschaften können verwendet werden, um Fuzzy -Übereinstimmungen auf den Spalten von Pandas DataFrame in Python durchzuführen. Wir werden einige von ihnen in den folgenden Beispielen demonstrieren.

Beispiel 01: Ein grundlegender Ansatz zur Durchführung von Fuzzy -Übereinstimmungen in Pandas

Zunächst werden wir die Fuzzywuzzy -Bibliotheken zusammen mit der Pandas Library importieren. Das FuzzyWuzzy -Paket verfügt über mehrere nützliche Funktionen, z. Lassen Sie uns nun zwei Wörterbücher erstellen. Nach dem Erstellen von Listen erstellen wir auch zwei leere Listen, um die Übereinstimmungen später zu speichern, wie unten angegeben.

Die Wörterbücher werden in der PD weitergeleitet.DataFrame () -Funktion zum Erstellen von DataFrames 'DF1' und 'DF2' mit den einzelnen Spalten 'Namen' mit Werten ('Clay', 'Hanna', 'Jack', 'Kim') und ('Clayton', 'Harry',, "Jim", "Lee", "Tim", "Billy") jeweils. Die Datenrahmen werden nun mit der Funktion Tolist () in Listen umgewandelt. Wir werden den Schwellenwert auf 75 festlegen, damit die Übereinstimmung erst beginnt, wenn zwischen beiden Saiten eine Ähnlichkeit von 75% besteht.

Es ist ersichtlich, dass unsere Datenrahmen in Listen konvertiert werden. Um die optimale Übereinstimmung aus der List2 zu finden, werden wir wiederholt die Elemente der List1 durchlaufen. Hier extrahieren wir die Elemente mit dem „Prozess des Verarbeitungsmoduls.extract () ”Funktion. Wenn wir es jetzt drucken, können wir die Genauigkeitsverhältniszahlen sehen, da „Limit = 2“ es anweist, nur die beiden nächsten Elemente mit ihrem Genauigkeitsverhältnis abzurufen. In die Liste M1 werden wir jedes engste Match hinzufügen. In der DataFrame werden in der Spalte "Match" die Liste der Übereinstimmungen "DF1" -Pinne.

Die äußere Schleife läuft noch einmal durch die Spalte "Match", und die innere Schleife durchfließt durch jede Gruppe von Spielen. Wenn k [1]> = Schwellenwert, werden nur Elemente mit Schwellenwerten, die gleich oder mehr als 75 sind, ausgewählt und zur Liste „P“ hinzugefügt. Wenn es mehrere Übereinstimmungen für ein bestimmtes Spaltenelement gibt, werden die Artikelübereinstimmungen mit dem ",", verbunden, mit dem ",".Join () Funktion und angehängt an M2 aufzulisten. So speichern Sie die übereinstimmende Ausgabe des folgenden Zeilenelements in der Spalte "DF1" von DataFrame 'DF1', die Liste 'P' wird auf leer eingestellt. Um unsere endgültige Ausgabe zu erhalten, wird die am nächsten gelegene Übereinstimmung auf DataFrame 'DF1' gespeichert.

Beispiel 02: Verwenden des Vorgangs.Extractone () -Methode zur Durchführung von Fuzzy -Matching in Pandas

Der Prozess.Die ExtractOne () -Methode wird nun verwendet, um nur den engsten Werten aus den beiden Datenrahmen zu entsprechen. Die verschiedenen Fuzzy -Matching -Funktionen werden in dieser Methode verwendet. Verfahren.Extractone (Abfrage, Torschütze, Auswahl) extrahiert die einzelne Übereinstimmung, die am besten zur gelieferten Abfrage aus der Auswahlliste passt. Torschütze ist ein optionaler Parameter, mit dem ein bestimmter Torschütze wie Fuzz angegeben werden kann.token_sort_ratio oder fuzz.token_set_ratio. Wie in Beispiel 1 erstellen wir zwei Listen und konvertieren sie dann in DataFrame -Spalten um.

Zuerst haben wir die Pandas und Fuzzywuzzy -Module importiert. Dann haben wir zwei Python -Wörterbücher 'D1' und 'D2' erstellt. Die Schlüssel beider Wörterbücher sind 'Gegenstände' und die Werte von D1 und D2 sind („Stativ“, „Drumstick“, „Bowtie“, „Nuss“, „Shirt“) und („Pod“, „Stick“, „Tie "," Kokosnuss "," T -Shirt "," Walnut "). Wir haben die DataFrames 'DF1' und 'DF2' erstellt, indem wir die Wörterbücher D1 und D2 in der PD übergeben haben.DataFrame () -Funktion. Die drei leeren Listen 'M1', 'M2' und 'P' werden ebenfalls erstellt, die wir später verwenden werden, um die passenden Werte zu speichern.

Die DataFrames DF1 und DF2 werden unter Verwendung der Funktion Tolist () in Listen L1 und L2 konvertiert, damit wir sie durch sie iterieren können, um die Übereinstimmungen zu finden. Wir werden die Liste L1 durchlaufen, um seine engste Übereinstimmung aus der Liste L2 zu extrahieren. Der Schwellenwert wird als 82 angegeben.

Der Scorer -Parameter wird als Fuzz angegeben.Verhältnis, um das Verhältnis der Ähnlichkeit zwischen zwei Zeichenfolgen zu bestimmen, abhängig von der Levenshtein -Entfernung. Um die maximalste Spiele herauszufiltern, wird jede Gruppe von Spielen nun durch die Schleife iteriert. Nur diese Elemente werden ausgewählt und angehängt, um „P“ aufzulisten, die den Zustand J [1]> = Schwellenwert, der größer als 82 ist, erfüllt. Wenn mehr als eine Übereinstimmung für ein bestimmtes Spaltenelement gefunden wird, werden die Übereinstimmungen mit dem ",", zusammengeführt, mit dem ",".Join () -Methode und hinzugefügt zur Liste M2. Die Liste "P" wird erneut auf leer eingestellt, um die Ausgabe der übereinstimmenden Elemente in der Spalte "DF1" von DataFrame "DF1" zu halten. Die Ausgangsübereinstimmungswerte werden in der Spalte 'Match' wieder auf 'DF1' gespeichert.

Es gibt nur eine Übereinstimmung, bei der die Ähnlichkeitsverhältnis mehr als 82% beträgt. Wenn wir den Schwellenwert reduzieren, können wir in der Spalte 'Match' von 'DF1' mehr übereinstimmende Werte erhalten

Beispiel 03: Verwenden der Methode get_close_matches () zur Durchführung von Fuzzy -Matching in Pandas

Die Verwendung der Methode get_close_matches () aus dem DIFFLIB -Paket ist eine der einfachsten Möglichkeiten, um Fuzzy -Matching in Pandas auszuführen. Erstellen wir zuerst unsere DataFrames mit der PD.DataFrame () -Funktion.

Wir haben zwei DataFrames 'DF1' und 'DF2' erstellt. Der DataFrame DF1 besteht aus 2 zwei Spalten "Club" mit Werten ("Tigerzz", "Yorker", "Wolf", "Dangerous", "LifeGaurd") und "Mitglieder" mit Werten (4, 6, 5, 6, 8 ). Es gibt auch 2 Spalten in 'df2' mit Labels "Club" und "Titel" mit Werten ('Tiger', 'Wolfy', 'York', 'Life', 'Danger') und (1, 3, 0, 4) , 3) jeweils. Angenommen, wir möchten unsere Datenrahmen basierend auf der Spalte "Club" kombinieren. Wir werden die Fuzzy -Match -Technik verwenden, um festzustellen, welche Clubnamen die nächsten Übereinstimmungen sind, da die Clubnamen in den beiden Datenrahmen geringfügig voneinander unterscheiden. Um dies zu erreichen. Zunächst werden wir das Diffflib -Modul importieren.

Wir haben eine doppelte Spalte erstellt, um die Werte des Spaltenclubs von DF2 zu behalten. Anschließend haben wir die Spaltenwerte "Club" in DataFrame 'DF2' in Clubwerte konvertiert, die sie in DataFrame 'DF1' mit der Methode get_close_matches () in der Funktion apply () übereinstimmen. Im letzten Schritt haben wir unsere DataFrames 'DF1' und 'DF2' zusammengeführt, um einen neuen Datenrahmen 'mached_values' zu erstellen. Es ist festzustellen.

Abschluss

In diesem Tutorial lehren wir, wie Sie Fuzzy -Matching in Pandas durchführen können. Wir haben die Fuzzywuzzy -Bibliothek besprochen und wie sie uns bei der Übereinstimmung von Strings hilft. Wir haben 3 Beispiele in diesem Tutorial implementiert. Im ersten Beispiel haben wir den grundlegenden Ansatz für die Durchführung einer Fuzzy -Übereinstimmung mit Pandas -Datenframes gezeigt. Im zweiten Beispiel haben wir den Prozess verwendet.ExtractOne () Methode zum Extrahieren der Fuzzy -Übereinstimmungen.