So führen sie fuzzy matching in pandas durch (mit beispiel)


Häufig möchten Sie möglicherweise zwei Datensätze in Pandas auf der Grundlage unvollständig übereinstimmender Zeichenfolgen zusammenfügen. Dies wird als Fuzzy-Matching bezeichnet.

Der einfachste Weg, Fuzzy-Matching in Pandas durchzuführen, ist die Verwendung der Funktion get_close_matches() aus dem Difflib- Paket.

Das folgende Beispiel zeigt, wie Sie diese Funktion in der Praxis nutzen können.

Beispiel: Fuzzy-Korrespondenz in Pandas

Nehmen wir an, wir haben die folgenden zwei Panda-DataFrames, die Informationen über verschiedene Basketballteams enthalten:

 import pandas as pd

#create two DataFrames
df1 = pd. DataFrame ({' team ': ['Mavericks', 'Nets', 'Warriors', 'Heat', 'Lakers'],
                    ' points ': [99, 90, 104, 117, 100]})

df2 = pd. DataFrame ({' team ': ['Mavricks', 'Warrors', 'Heat', 'Netts', 'Lakes'],
                    ' assists ': [22, 29, 17, 40, 32]})

#view DataFrames
print (df1)

        team points
0 Mavericks 99
1 Nets 90
2 Warriors 104
3 Heat 117
4 Lakers 100

print (df2)

       team assists
0 Mavricks 22
1 Warriors 29
2 Heat 17
3 Netts 40
4 Lakes 32

Nehmen wir nun an, wir möchten die beiden DataFrames basierend auf der Spalte „Team“ zusammenführen.

Da sich die Teamnamen zwischen den beiden DataFrames geringfügig unterscheiden, müssen wir Fuzzy-Matching verwenden, um die Teamnamen zu finden, die am meisten übereinstimmen.

Wir können dazu die Funktion get_close_matches() aus dem difflib- Paket verwenden:

 import difflib 

#create duplicate column to retain team name from df2
df2[' team_match '] = df2[' team ']

#convert team name in df2 to team name it most closely matches in df1
df2[' team '] = df2[' team ']. apply (lambda x: difflib. get_close_matches (x, df1[' team '])[ 0 ])

#merge the DataFrames into one
df3 = df1. merge (df2)

#view final DataFrame
print (df3)

        team points assists team_match
0 Mavericks 99 22 Mavricks
1 Nets 90 40 Nets
2 Warriors 104 29 Warriors
3 Heat 117 17 Heat
4 Lakers 100 32 Lakes

Das Ergebnis ist ein Datenrahmen, der jeden der fünf Teamnamen aus dem ersten DataFrame sowie das Team enthält, das am ehesten mit dem zweiten DataFrame übereinstimmt.

In der Spalte „team_match“ wird der Teamname aus dem zweiten DataFrame angezeigt, der am ehesten mit dem Teamnamen aus dem ersten DataFrame übereinstimmt.

Hinweis Nr. 1 : Standardmäßig gibt get_close_matches() die drei nächsten Übereinstimmungen zurück. Durch die Verwendung von [0] am Ende der Lambda-Funktion konnten wir jedoch nur die ähnlichste Teamnamenübereinstimmung zurückgeben.

Hinweis Nr. 2: Die vollständige Dokumentation für die Funktion get_close_matches() finden Sie hier .

Zusätzliche Ressourcen

In den folgenden Tutorials wird erläutert, wie Sie andere häufige Aufgaben in Pandas ausführen:

So führen Sie Pandas DataFrames über mehrere Spalten hinweg zusammen
So führen Sie zwei Pandas DataFrames im Index zusammen
Pandas beitreten oder fusionieren: Was ist der Unterschied?

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert