본문 바로가기
Python/Pandas

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

by PySun 2025. 4. 30.
반응형

소개

Pandas 라이브러리를 활용하며 데이터 처리를 하던 중에 'ValueError: Cannot mask array with array containing NA / NaN values'라는 오류가 발생할 수 있습니다. 이는 주로 NaN 값을 포함한 배열을 사용해 마스크(mask) 작업을 수행할 때 발생하는 오류입니다. 이 글에서는 이 오류의 원인과 해결 방법을 함께 살펴보겠습니다.

에러 발생 예시 코드

다음은 'ValueError: Cannot mask array with array containing NA / NaN values' 오류가 발생할 수 있는 코드 예시입니다.

import pandas as pd
import numpy as np

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

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

# 마스크를 사용해 데이터프레임 필터링
filtered_df = df[mask]
print(filtered_df)

에러 해결 방법

1. NaN 값 제거하기

가장 간단한 방법은 NaN 값을 제거하는 것입니다. 데이터프레임에서 NaN 값을 drop하는 메서드를 사용할 수 있습니다.

import pandas as pd
import numpy as np

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

# NaN을 포함하지 않는 행만 선택
df_cleaned = df.dropna()

# 조건부 마스크 생성 및 필터링
mask = df_cleaned['A'] > 2
filtered_df = df_cleaned[mask]
print(filtered_df)

2. NaN 값 처리하기

NaN 값을 특정 값으로 대체한 후 마스크를 적용할 수도 있습니다. `fillna()` 메서드를 사용하여 NaN 값을 처리할 수 있습니다.

import pandas as pd
import numpy as np

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

# NaN 값을 0으로 대체
df_filled = df.fillna(0)

# 조건부 마스크 생성 및 필터링
mask = df_filled['A'] > 2
filtered_df = df_filled[mask]
print(filtered_df)

3. NaN 값을 포함한 불리언 마스크를 사용하지 않기

또 다른 방법은 NaN 값을 포함하지 않는 불리언 마스크를 생성하는 것입니다. 이를 위해 `np.where()` 함수를 사용할 수 있습니다.

import pandas as pd
import numpy as np

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

# NaN이 아닌 값만을 대상으로 Mask 생성
mask = df['A'].notna() & (df['A'] > 2)

# 데이터프레임 필터링
filtered_df = df[mask]
print(filtered_df)

마무리

이번 포스팅에서는 pandas에서 'ValueError: Cannot mask array with array containing NA / NaN values' 오류를 해결하는 방법에 대해 알아보았습니다. NaN 값을 제거, 대체 또는 적절한 마스크를 사용하는 방법을 통해 이러한 오류를 방지할 수 있습니다. 데이터 분석을 진행할 때는 항상 NaN 값을 어떻게 처리할 것인지 고려해야지요. 🚀✨

반응형