Come risolvere il problema: impossibile confrontare un array digitato [float64] con un tipo scalare [bool]


Un errore che potresti riscontrare quando usi i panda è:

 TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

Questo errore si verifica in genere quando si tenta di creare un sottoinsieme di un DataFrame in base a più condizioni e non si riesce a inserire tra parentesi ciascuna singola condizione.

L’esempio seguente mostra come correggere questo errore nella pratica.

Come riprodurre l’errore

Supponiamo di creare il seguente DataFrame panda:

 import pandas as pd

#createDataFrame
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 AG 21
1 AG 30
2 AF26
3AC 29
4 BG 14
5 BF 29
6 BF 22
7 BC 16

Supponiamo ora di provare a utilizzare la funzione .loc per visualizzare solo le righe in cui team è uguale a “A” e posizione è uguale a “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]

Riceviamo un ValueError perché non abbiamo inserito tra parentesi le singole condizioni.

Poiché l’operatore & ha la precedenza sull’operatore == , i panda non riescono a interpretare questa affermazione nell’ordine corretto.

Come correggere l’errore

Il modo più semplice per correggere questo errore è semplicemente aggiungere tra parentesi le singole condizioni come segue:

 #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

Tieni presente che non riceviamo alcun ValueError e riusciamo a sottoimpostare con successo DataFrame.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in Python:

Come risolvere il problema: le colonne si sovrappongono ma non è specificato alcun suffisso
Come risolvere il problema: stai tentando di unire le colonne object e int64
Come risolvere il problema: impossibile definire una riga con colonne non corrispondenti

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *