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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *