Comment réparer : impossible de comparer un tableau dtypé [float64] avec un scalaire de type [bool]
Une erreur que vous pouvez rencontrer lors de l’utilisation de pandas est :
TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]
Cette erreur se produit généralement lorsque vous tentez de sous-ensembler un DataFrame en fonction de plusieurs conditions et que vous ne parvenez pas à placer des parenthèses autour de chaque condition individuelle.
L’exemple suivant montre comment corriger cette erreur dans la pratique.
Comment reproduire l’erreur
Supposons que nous créions le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'position': ['G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'], 'points': [21, 30, 26, 29, 14, 29, 22, 16]}) #view DataFrame print(df) team position points 0 A G 21 1 A G 30 2 A F 26 3 A C 29 4 B G 14 5 B F 29 6 B F 22 7 B C 16
Supposons maintenant que nous essayions d’utiliser la fonction .loc pour afficher uniquement les lignes où l’équipe est égale à « A » et la position est égale à « G » :
#attempt to only show rows where team='A' and position='G'
df.loc[df.team == 'A' & df.position == 'G']
TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]
Nous recevons une ValueError car nous n’avons pas placé de parenthèses autour des conditions individuelles.
Étant donné que l’opérateur & est prioritaire sur l’opérateur == , les pandas ne parviennent pas à interpréter cette instruction dans le bon ordre.
Comment réparer l’erreur
Le moyen le plus simple de corriger cette erreur consiste simplement à ajouter des parenthèses autour des conditions individuelles comme suit :
#only show rows where team='A' and position='G'
df.loc[(df.team == 'A') & (df.position == 'G')]
team position points
0 A G 21
1 A G 30
Notez que nous ne recevons aucune ValueError et que nous parvenons à sous-ensembler avec succès le DataFrame.
Ressources additionnelles
Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes en Python :
Comment réparer : les colonnes se chevauchent mais aucun suffixe n’est spécifié
Comment réparer : vous essayez de fusionner des colonnes objet et int64
Comment réparer : impossible de définir une ligne avec des colonnes qui ne correspondent pas