Cara melakukan pencocokan fuzzy di pandas (dengan contoh)


Seringkali Anda mungkin ingin menggabungkan dua kumpulan data dalam panda berdasarkan string yang tidak cocok secara sempurna. Ini disebut pencocokan fuzzy .

Cara termudah untuk melakukan pencocokan fuzzy di panda adalah dengan menggunakan fungsi get_close_matches() dari paket difflib .

Contoh berikut menunjukkan cara menggunakan fungsi ini dalam praktiknya.

Contoh: korespondensi fuzzy di panda

Katakanlah kita memiliki dua panda DataFrames berikut yang berisi informasi tentang berbagai tim bola basket:

 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

Sekarang katakanlah kita ingin menggabungkan dua DataFrame berdasarkan kolom Tim .

Karena nama tim sedikit berbeda antara kedua DataFrame, kita perlu menggunakan pencocokan fuzzy untuk menemukan nama tim yang paling cocok.

Kita dapat menggunakan fungsi get_close_matches() dari paket difflib untuk melakukan ini:

 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

Hasilnya adalah bingkai data yang berisi lima nama tim dari DataFrame pertama serta tim yang paling cocok dengan DataFrame kedua.

Kolom team_match menampilkan nama tim dari DataFrame kedua yang paling cocok dengan nama tim dari DataFrame pertama.

Catatan #1 : Secara default, get_close_matches() mengembalikan tiga kecocokan terdekat. Namun, dengan menggunakan [0] di akhir fungsi lambda, kami hanya dapat mengembalikan nama tim yang paling cocok.

Catatan #2: Anda dapat menemukan dokumentasi lengkap untuk fungsi get_close_matches() di sini .

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di panda:

Cara menggabungkan Pandas DataFrames di beberapa kolom
Cara menggabungkan dua Pandas DataFrames di index
Pandas Bergabung atau Bergabung: Apa bedanya?

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *