Pandas : comment comparer des chaînes entre deux colonnes
Vous pouvez utiliser la syntaxe de base suivante pour comparer des chaînes entre deux colonnes dans un DataFrame pandas :
df['col1'].str.strip().str.lower() == df['col2'].str.strip().str.lower()
La fonction str.strip() supprime les espaces de chaque chaîne et la fonction str.lower() convertit chaque chaîne en minuscules avant d’effectuer la comparaison.
L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.
Exemple : comparer des chaînes entre deux colonnes dans Pandas
Supposons que nous ayons le DataFrame pandas suivant qui contient deux colonnes avec les noms des équipes de basket-ball :
import pandas as pd #create DataFrame df = pd.DataFrame({'team1': ['Mavs', 'Hawks', 'Nets', 'Hornets', 'Lakers'], 'team2': [' Mavs ', 'Jazz', 'Nets', 'Hornets ', 'LAKERS']}) #view DataFrame print(df) team1 team2 0 Mavs Mavs 1 Hawks Jazz 2 Nets Nets 3 Hornets Hornets 4 Lakers LAKERS
Notez que certains noms d’équipe contiennent des espaces à des endroits aléatoires et que certains noms d’équipe sont en majuscules.
Supposons que nous souhaitions comparer les chaînes de chaque ligne pour voir si les noms d’équipe sont égaux dans chaque ligne.
Si nous utilisons uniquement le symbole == lors de la comparaison des chaînes, les pandas ne renverront True que s’ils sont dans la même casse et contiennent les espaces exactement aux mêmes positions :
#create new column that tests if strings in team columns are equal df['equal'] = df['team1'] == df['team2'] #view updated DataFrame print(df) team1 team2 equal 0 Mavs Mavs False 1 Hawks Jazz False 2 Nets Nets True 3 Hornets Hornets False 4 Lakers LAKERS False
Notez qu’une seule ligne renvoie True , car c’est la seule ligne dans laquelle les chaînes contiennent la même casse et les mêmes positions d’espaces.
Cependant, nous pouvons utiliser la fonction str.strip() pour supprimer les espaces de chaque chaîne et la fonction str.lower() pour convertir chaque chaîne en minuscules avant d’effectuer la comparaison :
#remove whitespace and convert each string to lowercase, then compare strings df['equal'] = df['team1'].str.strip().str.lower()==df['team2'].str.strip().str.lower() #view updated DataFrame print(df) team1 team2 equal 0 Mavs Mavs True 1 Hawks Jazz False 2 Nets Nets True 3 Hornets Hornets True 4 Lakers LAKERS True
Désormais, chaque ligne renvoie True, à l’exception de la ligne où les noms d’équipe sont « Hawks » et « Jazz », car même après avoir supprimé les espaces et converti les chaînes en minuscules, ces chaînes ne sont pas égales.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :
Pandas : Comment supprimer des caractères spécifiques des chaînes
Pandas : Vérifiez si la chaîne contient plusieurs sous-chaînes
Pandas : Comment remplacer les chaînes vides par NaN