MINERVA/Python 2026. 2. 3. 11:49
반응형

데이타 관점에서 정의하면 NaN은 '빈칸(결측치)' 또는 '값이 없다'를 의미한다. 이 내용을 시각적으로 정의하면, 엑셀 cell이 하얗게 비여 있는 상태를 의미한다.

 

1. NaN(Not a Number)

1.1 왜? 이것을 '빈칸'이라고 하지 않지 않고, NaN이라고 할까?

제 짐작으로는 프로그래밍 언어의 데이타 타입에 따라 다르게 인식하기 때문일듯하다.

1) 숫자 상태에서 빈칸: NaN(float로 취급)

2) 객체 상태에서 빈칸: None 

3) 문자열에서 빈칸:""(Empty String, 이건 내용이 없는것이지 NaN이 아니다!)

위와 같이 데이타 타입에 따라 의미하는 바가 다르기때문에 NaN이라는 것을 만들어 낸듯하다.

 

1.2. NaN의 특징

1) 연상 불능: NaN에 숫자를 더하거나 곱해도 무조건 NaN이 됨

2) 자기 자신 비교 불가

- if NaN == NaN 은 언제나 False이다.그래서, df == np.nan 대신 반드시 df.isna()를 사용해야함

 

2. inf(Infinity:무한대)

- 단순히 '엄청나게 큰 수'가 아닌, 계산이 불가능할 정도로 커진 상태 의미

- 수학에서 말하는 무한대 개념을 컴퓨터에 적용하기 위해서 만들어 냄

 

2.1 언제 발생

- 숫자를 0으로 나눌때 발생

print(10 / 0)        # 일반 파이썬에선 ZeroDivisionError 발생

print(np.array([10]) / 0)  # 넘파이/판다스에선 [inf] 발생

- 양의 무한대 (inf): $10 / 0$ 처럼 양수를 0으로 나눴을 때

- 음의 무한대 (-inf): $-10 / 0$ 처럼 음수를 0으로 나눴을 때

 

2.2 inf 특징

1) 전염성: inf에 어떤 숫자를 더하거나 곱해도 결과 inf

2) 통계 파괴자: 이게 제일 중요함

데이터에 inf가 단 하나라도 섞여 있으면, 해당 컬럼의 평균(mean) 또는 합계(sum)를 구했을 때 결과가 무조건 inf로 나옵니다. 
분석 데이터가 통째로 망가짐

 

3. NaN vs Inf

  NaN Inf
의미 데이터가 없음 (빈칸) 숫자가 너무 커서 측정 불가 (무한대)
발생 원인 데이터 누락, 잘못된 연산 (0/0) 0으로 나누기, 지수 함수 폭발 등
데이타 타입 실수형(float) 실수형(float)

 

4. 실무적인 작업

판다스의 많은 기능(fillna, dropna 등)은 기본적으로 NaN을 기준으로 설계되어 있음. 그래서, inf를 NaN으로 먼저 바꿔놓아야 함.

그렇지 않으면 데이타가 망가짐

(실무예)

df = df.replace([np.inf, -np.inf, 'inf', '-inf'], np.nan)

"무한대(inf)라는 계산 불가능한 값들을 일단 '비어있는 칸(NaN)'으로 만들어버리자. 그러면 나중에 한꺼번에 0으로 채우든 지우든 처리하기 편하니까!"

 

 

 

 

반응형
posted by choiwonwoo
: