Как исправить: valueerror: невозможно выполнить маскирование с помощью нелогического массива, содержащего значения na/nan.


Ошибка, с которой вы можете столкнуться при использовании панд:

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

Эта ошибка обычно возникает, когда вы пытаетесь найти строки в DataFrame pandas, содержащие определенную строку, но столбец, который вы ищете, имеет значения NaN.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, у нас есть следующий DataFrame 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

Теперь предположим, что мы пытаемся получить доступ ко всем строкам в DataFrame, где столбец позиции содержит строку «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

Мы получаем ошибку, поскольку в столбце позиции есть значение NaN.

Как исправить ошибку

Чтобы избежать этой ошибки, просто используйте аргумент na=False в функции 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

На этот раз мы можем без ошибок получить доступ ко всем строкам, содержащим слово «Охранник» в столбце позиции .

Другой способ избежать этой ошибки — использовать .fillna(False) следующим образом:

 #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

Мы снова можем без ошибок получить доступ ко всем строкам, содержащим слово «Охранник» в столбце позиции .

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить ошибку KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в int.
Как исправить: ValueError: операнды не могут быть переданы с помощью фигур.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *