본문 바로가기
Python/Pandas

pandas TypeError: Cannot mask with array containing NA / NaN values 오류 해결하기

by PySun 2025. 4. 29.
반응형

소개

pandas 라이브러리를 사용하다 보면 'TypeError: Cannot mask with array containing NA / NaN values'라는 오류를 종종 마주칠 수 있습니다. 이 오류는 일반적으로 NaN 값을 포함한 배열을 마스킹(masking)하고자 할 때 발생합니다. 이번 블로그 글에서는 이 오류의 원인과 해결 방법을 알아보겠습니다.

에러 발생 예시 코드

먼저, 'TypeError'가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다.

import pandas as pd
import numpy as np

# 데이터프레임 생성
data = {
    'A': [1, 2, np.nan, 4],
    'B': [5, 6, 7, 8]
}
df = pd.DataFrame(data)

# NaN 값을 포함한 불리언 마스크 생성
mask = df['A'] > 2

# 마스크를 데이터프레임에 적용
filtered_df = df[mask]
print(filtered_df)

에러 발생 원인

위 예시 코드에서 보듯이, 'A' 열에는 NaN 값이 포함되어 있습니다. 이 경우, 불리언 마스크는 NaN 값으로 인해 생성되지 않아 'TypeError'가 발생합니다. pandas는 NaN 값을 마스킹하는 데 있어 명확한 지침을 요구합니다.

에러 해결 방법

1. NaN 값을 사용하지 않도록 필터링하기

NaN 값을 제외한 데이터로 마스크를 생성하려면, `dropna()` 메서드를 사용하여 NaN이 있는 행을 미리 제거한 후 마스킹을 적용할 수 있습니다.

import pandas as pd
import numpy as np

# 데이터프레임 생성
data = {
    'A': [1, 2, np.nan, 4],
    'B': [5, 6, 7, 8]
}
df = pd.DataFrame(data)

# NaN 값을 제외한 데이터로 마스크 생성
filtered_df = df.dropna(subset=['A'])
mask = filtered_df['A'] > 2

# 마스크를 적용
result_df = filtered_df[mask]
print(result_df)

2. NaN 값을 다른 값으로 대체하기

또 다른 방법으로는 NaN 값을 특정 값으로 대체하여 마스크를 생성하는 것입니다. `fillna()` 메서드를 사용하여 NaN을 원하는 값으로 대체할 수 있습니다.

import pandas as pd
import numpy as np

# 데이터프레임 생성
data = {
    'A': [1, 2, np.nan, 4],
    'B': [5, 6, 7, 8]
}
df = pd.DataFrame(data)

# NaN 값을 0으로 대체
df['A'] = df['A'].fillna(0)

# 마스크 생성 및 적용
mask = df['A'] > 2
result_df = df[mask]
print(result_df)

마무리

이번 블로그 글에서는 pandas에서 발생하는 'TypeError: Cannot mask with array containing NA / NaN values' 오류와 이를 해결하는 방법에 대해 알아보았습니다. NaN 값을 제거하거나 다른 값으로 대체함으로써 마스킹을 적절히 수행할 수 있습니다. 이를 통해 데이터 처리의 정확성을 유지할 수 있기를 바랍니다. 언제나 pandas의 공식 문서를 참조하여 더 깊이 있는 이해를 갖추는 것이 중요합니다.

반응형