Jak wykonać dopasowywanie rozmyte w pandach (z przykładem)


Często możesz chcieć połączyć dwa zbiory danych w pandy w oparciu o niedokładnie pasujące ciągi. Nazywa się to dopasowaniem rozmytym .

Najłatwiejszym sposobem przeprowadzenia dopasowywania rozmytego w pandach jest użycie funkcji get_close_matches() z pakietu difflib .

Poniższy przykład pokazuje, jak w praktyce wykorzystać tę funkcję.

Przykład: rozmyta korespondencja u pand

Załóżmy, że mamy następujące dwie ramki danych pandy, które zawierają informacje o różnych drużynach koszykówki:

 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

Załóżmy teraz, że chcemy połączyć dwie ramki danych w oparciu o kolumnę Zespół .

Ponieważ nazwy zespołów różnią się nieco w obu ramkach danych, musimy użyć dopasowywania rozmytego, aby znaleźć nazwy zespołów, które najlepiej pasują.

Możemy w tym celu użyć funkcji get_close_matches() z pakietu difflib :

 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

W rezultacie powstaje ramka danych zawierająca każdą z pięciu nazw zespołów z pierwszej ramki danych oraz zespół, który najbardziej pasuje do drugiej ramki danych.

Kolumna team_match wyświetla nazwę zespołu z drugiej ramki danych, która najbardziej odpowiada nazwie zespołu z pierwszej ramki danych.

Uwaga nr 1 : Domyślnie funkcja get_close_matches() zwraca trzy najbliższe dopasowania. Jednakże, używając [0] na końcu funkcji lambda, mogliśmy zwrócić tylko najbliższą nazwę zespołu.

Uwaga nr 2: Pełną dokumentację funkcji get_close_matches() można znaleźć tutaj .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w pandach:

Jak połączyć ramki danych Pandas w wielu kolumnach
Jak połączyć dwie ramki danych Pandas w pliku Index
Pandy Dołącz lub połącz: jaka jest różnica?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *