Come risolvere il problema: valueerror: impossibile mascherare un array non booleano contenente valori na/nan


Un errore che potresti riscontrare quando usi i panda è:

 ValueError : Cannot mask with non-boolean array containing NA / NaN values

Questo errore si verifica in genere quando si tenta di trovare righe in un DataFrame panda che contengono una stringa particolare, ma la colonna che si sta cercando ha valori NaN.

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
import numpy as np

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B'],
                   ' position ': ['Guard', 'Guard', np. nan , 'Guard', 'Forward'],
                   ' points ': [22, 28, 14, 13, 19]})

#view DataFrame
print (df)

  team position points
0 A Guard 22
1 A Guard 28
2 A NaN 14
3 B Guard 13
4 B Forward 19

Supponiamo ora di provare ad accedere a tutte le righe del DataFrame in cui la colonna position contiene la stringa “Guard”:

 #access all rows where position column contains 'Guard'
df[df[' position ']. str . contains (' Guard ')]

ValueError : Cannot mask with non-boolean array containing NA / NaN values

Riceviamo un errore perché è presente un valore NaN nella colonna posizione .

Come correggere l’errore

Per evitare questo errore, usa semplicemente l’argomento na=False nella funzione str.contains() :

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard ', na= False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

Questa volta possiamo accedere a tutte le righe contenenti “Guard” nella colonna posizione senza errori.

Un altro modo per evitare questo errore è utilizzare .fillna(False) come segue:

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard '). fillna ( False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

Ancora una volta possiamo accedere a tutte le righe contenenti “Guard” nella colonna posizione senza errori.

Risorse addizionali

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

Come correggere l’errore chiave nei Panda
Come risolvere il problema: ValueError: impossibile convertire float NaN in int
Come risolvere il problema: ValueError: non è stato possibile trasmettere gli operandi con le forme

Aggiungi un commento

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