Python 부동 소수점인 float타입을 사용할때 볼수 있는 nan에 대해 알아보겠습니다.
nan은 not a number를 의미합니다.
파이썬에서 none은 null을 의미합니다.
nan은 float타입의 데이터가 none일 경우를 의미합니다.
float 타입의 변수를 nan 체크를 할때 주의점을 예제를 보면서 확인해보겠습니다.
float nan
파이썬에서 float 타입의 nan을 확인해보겠습니다.
print(float('nan'))
# nan
print(type(float('nan')))
# <class 'float'>
비교 연산자를 사용해 float 값을 비교해보겠습니다.
nan을 숫자 10과 비교한 결과입니다.
print(10 < float('nan'))
# False
print(10 > float('nan'))
# False
print(10 == float('nan'))
# False
print(10 != float('nan'))
# True
nan은 숫자 10보다 크지도 작지도 같지도 않기 때문에 비교결과는 False를 반환했습니다.
하지만 10 !=
결과는 True를 반환했습니다.
nan은 10과 같지 않기 때문에 True를 반환하는 것이 맞습니다.
하지만 다음 처리에서 nan을 그대로 처리하려고 하면 에러가 발생할 수 있습니다.
그러면 값이 nan과 같은지 비교연사를 사용해 체크해보겠습니다.
print(float('nan') == float('nan'))
# False
print(float('nan') != float('nan'))
# True
nan과 nan이 같은지 비교한 == 결과는 False입니다.
같지 않다는 결과입니다.
그리고 nan과 nan이 같지 않은지 비교한 != 결과는 True입니다.
비교 연산자로는 float값이 nan인지 확인하는것은 정확한 결과를 얻을 수 없습니다.
isnan()
nan 값을 체크하기 위해서는 isnan()을 사용합니다.
isnan을 사용하기 위해서는 math를 import해야 합니다.
isnan()을 사용해 nan값을 체크해보겠습니다.
import math
print(math.isnan(float(10)))
# False
print(math.isnan(float(10.5)))
# False
print(math.isnan(float('nan')))
# True
값이 설정되어 있는 경우에는 False를 반환했습니다.
값이 설정 안되어 있는 경우인 nan일 경우에는 True를 반환합니다.
nan값을 체크 하고 싶은 경우에는 isnan()을 사용해야 합니다.
주의점으로는 none값일 경우에는 에러가 발생합니다.
print(math.isnan('none'))
결과
TypeError: must be real number, not str
isnan()을 사용해 nan값을 체크한 반환값은 True 또는 False이기 때문에 if문에서도 바로 사용할 수 있습니다.
import math
x=float('nan')
if math.isnan(x):
print('This is nan.')
else:
print('This is not nan.')
정리
nan을 체크하기 위해서는 비교연산자가 아닌 isnan()을 사용해야 합니다.
그리고 isnan의 반환값은 bool타입을 반환합니다.
댓글