Comment effectuer une correspondance floue en pandas?
Différentes fonctions et propriétés peuvent être utilisées pour effectuer des correspondances floues sur les colonnes de Pandas DataFrame en Python. Nous en démontrerons quelques-uns dans les exemples ci-dessous.
Exemple 01: une approche de base pour effectuer des matchs flous dans les pandas
Tout d'abord, nous importerons les bibliothèques Fuzzywuzzy avec la bibliothèque Pandas. Le package Fuzzywuzzy a plusieurs fonctions utiles, telles que la capacité de déterminer la distance de Levenshtein, qui peut être utile dans la correspondance de cordes floues. Maintenant, créons deux dictionnaires. Après avoir créé des listes, nous créerons également deux listes vides pour stocker les matchs plus tard comme indiqué ci-dessous.
Les dictionnaires sont passés à l'intérieur du PD.Fonction DataFrame () Pour créer des données de données 'df1' et 'df2' avec les colonnes uniques 'name' avec des valeurs ('Clay', 'Hanna', 'Jack', 'Kim') et ('Clayton', 'Harry', «Jim», «Lee», «Tim», «Billy») respectivement. Les dataframes seront désormais transformés en listes à l'aide de la fonction tolist (). Nous allons définir le seuil à 75 afin que la correspondance ne commence que lorsqu'il y a 75% de similitude entre les deux chaînes.
On peut voir que nos données de données sont converties en listes. Pour trouver la correspondance optimale de la List2, nous irons à plusieurs reprises à plusieurs reprises dans les éléments de la liste1. Ici, nous extrayons les éléments en utilisant le «processus du module de traitement.Fonction extrait () ”. Si nous l'imprimons maintenant, nous pouvons voir les nombres de rapports de précision puisque «Limit = 2» lui demande de ne récupérer que les deux éléments les plus proches avec leur rapport de précision. À la liste M1, nous ajouterons chaque match le plus proche. Dans le DataFrame, la liste des matchs «DF1» sera stockée dans la colonne «Match».
La boucle extérieure passera une fois de plus dans la colonne «Match» et la boucle intérieure itérera à travers chaque groupe de matchs. Si k [1]> = seuil, seuls les éléments avec des valeurs de seuil égal ou plus de 75 seront sélectionnés et ajoutés à la liste «P». S'il y a plusieurs correspondances pour un élément de colonne donné, les matchs d'élément seront joints à l'aide du «,».join () fonction et annexé pour lister m2. Pour stocker la sortie correspondante de l'élément de lignes suivant dans la colonne DataFrame 'DF1', la liste «P» sera définie sur vide. Pour obtenir notre sortie finale, la correspondance la plus proche sera stockée à DataFrame 'DF1'.
Exemple 02: Utilisation du processus.Méthode extractone () pour effectuer une correspondance floue dans les pandas
Le processus.La méthode ExtractOne () sera désormais utilisée pour correspondre aux valeurs les plus proches des deux dataframes. Les différentes fonctions de correspondance floues seront utilisées dans cette méthode. Processus.Extractone (requête, buteur, choix) extrait le match unique qui correspond le mieux à la requête fournie de la liste de choix. Le buteur est un paramètre facultatif qui peut être utilisé pour spécifier un buteur spécifique, comme Fuzz.token_sort_ratio ou fuzz.token_set_ratio. Comme dans l'exemple 1, nous créerons deux listes, puis les convertirons en colonnes DataFrame.
Tout d'abord, nous avons importé les modules Pandas et Fuzzywuzzy. Ensuite, nous avons créé deux dictionnaires Python 'D1' et 'D2'. Les clés des deux dictionnaires sont des «éléments» et les valeurs de D1 et D2 sont («trépied», «Drumstick», «Bowtie», «Nut», «Shirt») et («Pod», «Stick», «Tie "," Coconut "," Tshirt "," Walnut "). Nous avons créé les DataFrames 'DF1' et 'DF2' en passant les dictionnaires D1 et D2 dans le PD.Fonction DataFrame (). Les trois listes vides «M1», «M2» et «P» sont également créées que nous utiliserons plus tard pour stocker les valeurs correspondantes.
Les DataFrames DF1 et DF2 sont convertis en listes L1 et L2 à l'aide de la fonction Tolist () afin que nous puissions les itérer pour trouver les correspondances. Nous allons parcourir la liste L1 pour extraire sa correspondance la plus proche de la liste L2. La valeur de seuil est spécifiée comme 82, donc la correspondance floue n'a lieu que lorsque les cordes seront au moins 82% près les unes des autres.
Le paramètre du marqueur est spécifié sous forme de fuzz.Ratio pour déterminer le rapport de ressemblance entre deux chaînes en fonction de la distance de Levenshtein. Pour filtrer la correspondance maximale la plus proche, chaque groupe de matchs sera désormais itéré par la boucle. Seuls ces éléments seront sélectionnés et annexés pour répertorier «P» qui satisfait la condition j [1]> = seuil qui est supérieur à 82. Si plusieurs matchs sont trouvés pour un élément de colonne particulier, les matchs sont fusionnés à l'aide du «,».join () Méthode et ajouté à la liste M2. La liste «P» sera à nouveau définie sur vide pour maintenir la sortie des éléments correspondants dans la colonne DataFrame «DF1». Les valeurs de correspondance de sortie seront stockées à «DF1» dans la colonne «match».
Il n'y a qu'une seule correspondance où le rapport de similitude est supérieur à 82%. Si nous réduisons le seuil, nous pouvons obtenir plus de valeurs correspondantes dans la colonne «Match» de «DF1»
Exemple 03: Utilisation de la méthode get_close_matches () pour effectuer une correspondance floue en pandas
L'utilisation de la méthode get_close_matches () du package diffib est l'une des façons les plus simples d'exécuter la correspondance floue en pandas. Créons d'abord nos dataframes en utilisant le PD.Fonction DataFrame ().
Nous avons créé deux DataFrames «DF1» et «DF2». Le DataFrame DF1 se compose de 2 colonnes «Club» avec des valeurs («Tigerzz», «Yorker», «Wolf», «Dangerement», «LifeGaurd») et «Membres» ayant des valeurs (4, 6, 5, 6, 8 ). Il y a aussi 2 colonnes dans «DF2» avec des étiquettes «Club» et «Titres» ayant des valeurs («Tiger», «Wolfy», «York», «Life», «Danger») et (1, 3, 0, 4 , 3) respectivement. Disons que nous voulons combiner nos dataframes en fonction de la colonne «Club». Nous utiliserons la technique de correspondance floue pour déterminer quels noms de club sont les correspondances les plus proches car les noms de club dans les deux dataframes diffèrent légèrement les uns des autres. Pour ce faire, nous pouvons utiliser la méthode get_close_matches () à partir du package diffib. Tout d'abord, nous importerons le module Diffblib.
Nous avons créé une colonne en double «Mattered» pour conserver les valeurs du club de colonne de DF2. Ensuite, nous avons converti les valeurs de colonne du «club» dans DataFrame «DF2» en valeurs du club. Dans la dernière étape, nous avons fusionné nos dataframes 'DF1' et 'DF2' pour créer un nouveau DataFrame 'Mached_Values'. On peut remarquer que la colonne `` appariée '' dans le DataFrame ci-dessus contient les valeurs qui sont les plus étroitement adaptées aux valeurs correspondantes dans la colonne `` Club ''.
Conclusion
Dans ce tutoriel, nous enseignons comment vous pouvez effectuer une correspondance floue en pandas. Nous avons discuté de la bibliothèque Fuzzywuzzy et comment cela nous aide dans la correspondance des chaînes. Nous avons mis en œuvre 3 exemples dans ce tutoriel. Dans le premier exemple, nous avons montré l'approche de base pour effectuer une correspondance floue avec Pandas Dataframes. Dans le deuxième exemple, nous avons utilisé le processus.Méthode ExtractOne () pour extraire les matchs flous.