Come risolvere il problema: impossibile eseguire "rand_" con un array di tipo [int64] e uno scalare di tipo [bool]


Un errore che potresti riscontrare in Python è:

 TypeError :Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]

Questo errore si verifica in genere quando si tenta di filtrare un DataFrame Panda utilizzando più condizioni ma non si riesce a utilizzare parentesi attorno a ogni singola condizione.

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

Come riprodurre l’errore

Supponiamo di avere i seguenti panda DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
print (df)

  team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
4 B 14 12 6
5 B 11 9 5
6 B 20 9 9
7 B 28 4 12

Ora diciamo di provare a filtrare DataFrame per mostrare solo le righe in cui la colonna della squadra è uguale ad “A” e la colonna dei punti è maggiore di 15:

 #attempt to filter DataFrame
df. loc [df. team == ' A ' & df. points > 15 ]

TypeError :Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]

Stiamo ricevendo un errore perché non abbiamo inserito tra parentesi ogni singola condizione.

Come correggere l’errore

Per correggere questo errore, dobbiamo semplicemente assicurarci di inserire tra parentesi ogni singola condizione durante l’esecuzione del filtro:

 #filter DataFrame
df. loc [(df. team == ' A ') & (df. points > 15 )]

	team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10

Tieni presente che siamo in grado di filtrare correttamente DataFrame per mostrare solo le righe in cui Team è uguale a “A” e Points è maggiore di 15.

Tieni presente che dobbiamo anche inserire tra parentesi ogni singola condizione se utilizziamo a o “| » operatore invece:

 #filter rows where team is equal to 'A' or points is greater than 15
df. loc [( df.team == ' A ') | (df. points > 15 )]

team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
6 B 20 9 9
7 B 28 4 12

Tieni presente che stiamo ancora una volta evitando eventuali errori.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni nei panda:

Come risolvere il problema: il modulo “pandas” non ha l’attributo “dataframe”.
Come risolvere il problema: TypeError: nessun dato numerico da tracciare
Come correggere l’errore chiave nei Panda

Aggiungi un commento

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