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