해결 방법: valueerror: na/nan 값을 포함하는 부울이 아닌 배열로 마스크할 수 없습니다.
pandas를 사용할 때 발생할 수 있는 오류는 다음과 같습니다.
ValueError : Cannot mask with non-boolean array containing NA / NaN values
이 오류는 일반적으로 특정 문자열이 포함된 pandas DataFrame의 행을 찾으려고 할 때 발생하지만 검색 중인 열에 NaN 값이 있습니다.
다음 예에서는 실제로 이 오류를 수정하는 방법을 보여줍니다.
오류를 재현하는 방법
다음과 같은 팬더 DataFrame이 있다고 가정합니다.
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
이제 위치 열에 “Guard”라는 문자열이 포함된 DataFrame의 모든 행에 액세스하려고 한다고 가정합니다.
#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 값이 있기 때문에 오류가 발생합니다.
오류를 수정하는 방법
이 오류를 방지하려면 str.contains() 함수에서 na=False 인수를 사용하면 됩니다.
#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
이번에는 위치 열에 “Guard”가 포함된 모든 행에 오류 없이 액세스할 수 있습니다.
이 오류를 방지하는 또 다른 방법은 다음과 같이 .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
다시 한 번 오류 없이 위치 열에 “Guard”가 포함된 모든 행에 액세스할 수 있습니다.
추가 리소스
다음 튜토리얼에서는 Python의 다른 일반적인 오류를 수정하는 방법을 설명합니다.
Pandas에서 KeyError를 수정하는 방법
수정 방법: ValueError: float NaN을 int로 변환할 수 없습니다.
해결 방법: ValueError: 피연산자를 모양과 함께 브로드캐스트할 수 없습니다.