Como corrigir: valueerror: não é possível mascarar com matriz não booleana contendo valores na/nan


Um erro que você pode encontrar ao usar pandas é:

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

Este erro geralmente ocorre quando você está tentando encontrar linhas em um DataFrame do pandas que contém uma string específica, mas a coluna que você está pesquisando tem valores NaN.

O exemplo a seguir mostra como corrigir esse erro na prática.

Como reproduzir o erro

Suponha que temos o seguinte DataFrame do pandas:

 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

Agora suponha que tentamos acessar todas as linhas no DataFrame onde a coluna de posição contém a string “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

Recebemos um erro porque há um valor NaN na coluna de posição .

Como corrigir o erro

Para evitar este erro, simplesmente use o argumento na=False na função 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

Desta vez podemos acessar todas as linhas contendo “Guarda” na coluna de posição sem erros.

Outra maneira de evitar esse erro é usar .fillna(False) da seguinte maneira:

 #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

Mais uma vez podemos acessar todas as linhas contendo “Guarda” na coluna de posição sem erros.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:

Como corrigir KeyError em Pandas
Como corrigir: ValueError: não é possível converter float NaN em int
Como corrigir: ValueError: os operandos não puderam ser transmitidos com formas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *