본문 바로가기
Python/numpy

numpy ValueError: Input contains NaN, infinity or a value too large for dtype('float64') 오류 해결하기

by PySun 2024. 10. 10.
반응형

소개

NumPy를 사용하다 보면 자주 마주치게 되는 오류 중 하나가 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64')'입니다. 이 오류는 입력 데이터에 NaN(결측치), 무한대(infinity), 또는 float64형으로 표현할 수 없는 큰 값이 포함되어 있을 때 발생합니다. 이런 오류는 데이터 전처리를 어떻게 하느냐에 따라 다양한 원인을 가질 수 있습니다. 이번 블로그에서는 이러한 오류가 발생하는 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 위와 같은 'ValueError'가 발생할 수 있는 간단한 예제 코드를 살펴보겠습니다.

import numpy as np

# 데이터에 NaN 값 추가
data = np.array([1, 2, 3, np.nan, 5])

# NaN을 포함한 데이터로 평균값 계산
mean_value = np.mean(data)
print(mean_value)

에러 해결 방법

1. NaN 값 확인 및 제거

가장 일반적인 해결 방법은 데이터에서 NaN 값을 확인하고 이를 제거하는 것입니다. NumPy의 함수를 사용하여 NaN 값을 필터링할 수 있습니다.

import numpy as np

# 데이터에 NaN 값 추가
data = np.array([1, 2, 3, np.nan, 5])

# NaN을 제거한 후 평균값 계산
clean_data = data[~np.isnan(data)]
mean_value = np.mean(clean_data)
print(mean_value)

2. 무한대(inf) 값 처리

무한대 값을 포함한 경우, numpy에서 inf를 찾아서 처리하는 방법도 있습니다. 예를 들어, inf 값을 제거하는 방법이 있습니다.

import numpy as np

# 데이터에 무한대(inf) 값 추가
data = np.array([1, 2, np.inf, 4, 5])

# inf 값을 제거한 후 평균값 계산
clean_data = data[~np.isinf(data)]
mean_value = np.mean(clean_data)
print(mean_value)

3. 매우 큰 값 처리

입력 데이터가 float64의 범위를 초과하는 경우, 해당 값을 스케일링하거나 조정하는 방법이 필요합니다. 일반적으로 제한된 범위로 scaling을 적용하면 유용합니다.

import numpy as np

# 데이터에 큰 값 추가
data = np.array([1, 2, 3, 1e+308, 5])

# 값을 스케일링하여 평균값 계산
scaled_data = data / 1e+308  # 스케일링
mean_value = np.mean(scaled_data)
print(mean_value)

마무리

이번 포스트에서는 NumPy에서 발생하는 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64')' 오류에 대한 원인과 해결 방법을 살펴보았습니다. NaN과 inf 값을 제거하거나, 큰 값 처리 시 적절한 스케일링을 하는 방법을 통해 이러한 오류를 해결할 수 있습니다. 데이터를 다룰 때는 항상 입력 데이터를 점검하고 전처리하는 것이 중요합니다. 이를 통해 더욱 깨끗하고 유용한 데이터 분석 결과를 얻으실 수 있습니다.

반응형