Как исправить: ValueError: невозможно маскировать небулевым массивом, содержащим значения NA/NaN


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

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

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

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

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

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd
import numpy as np

#create DataFrame
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, где столбец position содержит строку «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

Мы получаем ошибку, потому что в столбце position есть значение 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 в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.