Skip to content

Python의 NaN

Python의 NaN 다루기


NaN

NaNNot-A-Number의 약자로, 숫자가 아닌 값들을 나타낸다.

pandas로 데이터를 처리하다보면 은근히 NaN을 다룰 일이 많은데, 몇몇 라이브러리들이 제공하는 NaN 여부 검사용 함수들은 입력값이 str일 경우 에러를 발생시키기 때문에 Boolean 값을 반환하는 함수를 만들어보았다.

def is_nan(x):
    return (x != x)

Note

pandas는 테이블 데이터를 읽을 때 빈 셀을 np.nan으로 처리하는데, 칼럼 타입은 문자열일 경우1에 정상적으로 데이터를 처리하기 위해 math.isnan(), np.isnan()으로 NaN 여부를 검사하면 정상 데이터가 있을 때 에러가 발생한다.

import math

print(math.isnan("a"))
Traceback (most recent call last):
File "C:\projects\python311\main.py", line 3, in <module>
    print(math.isnan("a"))
        ^^^^^^^^^^^^^^^
TypeError: must be real number, not str

import math


def is_nan(x):
    return x != x


data = ["a", 1, 1.0, math.inf, math.nan, float("nan")]
for d in data:
    print(repr(d), is_nan(d))
'a' False
1 False
1.0 False
inf False
nan True
nan True

Tip

아래와 같이 pandas.isna() 함수를 통해 동일한 작업을 처리할 수도 있다.

import math

import pandas as pd

data = ["a", 1, 1.0, math.inf, math.nan, float("nan")]
for d in data:
    print(repr(d), pd.isna(d))
'a' False
1 False
1.0 False
inf False
nan True
nan True


Reference


  1. 해당 셀에 입력되어야 하는 데이터 타입은 문자열일 경우