Как исправить: 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: операнды не могут быть переданы с помощью фигур.