본문 바로가기
Python/numpy

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

by PySun 2024. 10. 13.
반응형

소개

NumPy를 사용할 때 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64')' 오류는 흔한 문제 중 하나입니다. 이 오류는 입력 데이터에 NaN(Not a Number) 값이나 무한대 값, 또는 특정 범위를 초과하는 값이 포함될 때 발생합니다. 이번 블로그 글에서는 이러한 에러 발생 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

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

import numpy as np

# 배열에 NaN 값 포함
data = np.array([1, 2, np.nan, 4, 5])

# 이 배열을 사용하여 평균 계산
average = np.mean(data)
print(average)

에러 해결 방법

1. NaN 및 무한대 값 제거

NumPy 배열에서 NaN 및 무한대 값을 제거하려면 np.isnan()  np.isfinite() 함수를 사용합니다. 이 방법으로 처리할 수 있습니다.

import numpy as np

# 배열에 NaN 값 포함
data = np.array([1, 2, np.nan, 4, 5])

# NaN 및 무한대 값 제거
cleaned_data = data[~np.isnan(data) & np.isfinite(data)]

# 평균 계산
average = np.mean(cleaned_data)
print(average)

2. 대체값 사용

NaN이나 무한대 값을 제거하는 대신 특정 값으로 대체할 수도 있습니다. 예를 들어, NaN 값을 0으로 대체하는 방법입니다.

import numpy as np

# 배열에 NaN 값 포함
data = np.array([1, 2, np.nan, 4, 5])

# NaN 값을 0으로 대체
data_with_replacement = np.nan_to_num(data, nan=0)

# 평균 계산
average = np.mean(data_with_replacement)
print(average)

3. 데이터의 크기 확인

데이터가 너무 크거나, 지정한 dtype에 맞지 않는 경우에는 데이터의 크기를 확인해야 합니다. 큰 숫자를 처리할 수 있는 데이터 타입으로 변경할 수 있습니다.

import numpy as np

# 큰 숫자를 포함한 배열
large_data = np.array([1e308, 1e309])

# 값 확인
try:
    total = np.sum(large_data)
    print(total)
except OverflowError as e:
    print("오류 발생:", e)

# dtype을 더 큰 형태로 변경
large_data = large_data.astype(np.float128)
total = np.sum(large_data)
print(total)

마무리

이번 블로그 글에서는 NumPy에서 발생하는 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64')' 오류에 대한 해결 방법을 살펴보았습니다. NaN 및 무한대 값을 제거하거나 대체하는 방법, 데이터의 크기를 점검하여 dtype을 수정하는 등 다양한 접근 방식을 적용하여 이러한 오류를 극복할 수 있습니다. NumPy를 사용할 때는 데이터를 사전 검증하는 것이 훨씬 더 안전하고 효율적입니다.

반응형