Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy nan_to_num() 활용법 – NaN 값 채우기와 무한대를 큰 유한 숫자로 변환하기

Python에서 배열에 포함된 NaN(Not a Number) 값을 0으로 채우고, 양의 무한대(inf)와 음의 무한대(-inf)를 크거나 작은 유한 숫자로 변환해야 하는 경우가 자주 있습니다. 이럴 때 numpy.nan_to_num() 메서드를 사용하면 간단하게 처리할 수 있습니다.

numpy.nan_to_num() 메서드란?

numpy.nan_to_num()은 입력 배열 x에서 비유한(non-finite) 값들을 지정한 값으로 대체하여 반환합니다. copy 매개변수가 False로 설정되면 원본 배열 x 자체가 수정될 수도 있습니다.

주요 매개변수

  • x: 처리할 입력 데이터입니다.
  • copy: True이면 x의 복사본을 생성하고, False이면 제자리(in-place)에서 값을 교체합니다. 단, 제자리 연산은 배열로 캐스팅할 때 복사본이 필요 없는 경우에만 적용됩니다. 기본값은 True입니다.
  • nan: NaN 값을 채우는 데 사용할 값입니다. 값을 지정하지 않으면 NaN은 0.0으로 대체됩니다.
  • posinf: 양의 무한대 값을 채우는 데 사용할 값입니다. 값을 지정하지 않으면 매우 큰 유한 숫자로 대체됩니다.
  • neginf: 음의 무한대 값을 채우는 데 사용할 값입니다. 값을 지정하지 않으면 매우 작은(음수) 유한 숫자로 대체됩니다.

구현 단계

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

array() 메서드를 사용해 무한대와 NaN이 포함된 NumPy 배열을 생성합니다.

arr = np.array([np.inf, -np.inf, np.nan, -128, 128])

배열을 출력해 확인합니다.

print("Our Array...\n",arr)

배열의 차원을 확인합니다.

print("\nDimensions of our Array...\n",arr.ndim)

배열의 데이터 타입을 확인합니다.

print("\nDatatype of our Array object...\n",arr.dtype)

배열의 형태(shape)를 확인합니다.

print("\nShape of our Array object...\n",arr.shape)

이제 np.nan_to_num() 메서드를 사용해 NaN을 지정한 값으로 채우고, 무한대를 유한 숫자로 변환합니다. 아래 예제에서는 NaN을 11111로 대체했습니다.

print("\nResult...\n",np.nan_to_num(arr, nan = 11111))

전체 예제 코드

import numpy as np

# array() 메서드로 NumPy 배열 생성
arr = np.array([np.inf, -np.inf, np.nan, -128, 128])

# 배열 출력
print("Our Array...\n",arr)

# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)

# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)

# 형태(shape) 확인
print("\nShape of our Array object...\n",arr.shape)

# nan_to_num()으로 NaN을 11111로 채우고 무한대는 유한 숫자로 변환
print("\nResult...\n",np.nan_to_num(arr, nan = 11111))

실행 결과

Our Array...
[ inf -inf nan -128. 128.]

Dimensions of our Array...
1

Datatype of our Array object...
float64

Shape of our Array object...
(5,)

Result...
[ 1.79769313e+308 -1.79769313e+308 1.11110000e+004 -1.28000000e+002
1.28000000e+002]

결과 해석

실행 결과를 보면 다음과 같이 변환된 것을 확인할 수 있습니다.

  • inf(양의 무한대) → 1.79769313e+308: float64 타입이 표현할 수 있는 최댓값으로 대체되었습니다.
  • -inf(음의 무한대) → -1.79769313e+308: float64 타입의 최솟값으로 대체되었습니다.
  • nan11111: nan 매개변수로 지정한 값으로 채워졌습니다.

이처럼 numpy.nan_to_num()을 활용하면 데이터 분석이나 머신러닝 전처리 과정에서 비유한 값으로 인한 오류를 손쉽게 방지할 수 있습니다.