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