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

Ajouter un commentaire

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