[python] NaN 값을 확인하려면 어떻게해야합니까?

float('nan')Nan (숫자가 아님)이됩니다. 그러나 어떻게 확인합니까? 매우 쉬워야하지만 찾을 수 없습니다.



답변

math.isnan (x)

반환 Truex는 NaN (숫자), 및 경우 False그렇지.

>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True


답변

NaN을 테스트하는 일반적인 방법은 그것이 자신과 같은지 확인하는 것입니다.

def isNaN(num):
    return num != num


답변

numpy.isnan(number)NaN그렇지 않은 경우 알려줍니다 .


답변

변수를 테스트 할 수있는 세 가지 방법은 “NaN”입니다.

import pandas as pd
import numpy as np
import math

#For single variable all three libraries return single boolean
x1 = float("nan")

print(f"It's pd.isna  : {pd.isna(x1)}")
print(f"It's np.isnan  : {np.isnan(x1)}")
print(f"It's math.isnan : {math.isnan(x1)}")

산출

It's pd.isna  : True
It's np.isnan  : True
It's math.isnan  : True


답변

다음은 작업에 대한 답변입니다.

  • IEEE 754 표준을 고려한 NaN 구현
    • 즉 : 파이썬의 NaN : float('nan'), numpy.nan
  • 다른 객체 : 문자열 또는 무엇이든 (만약 예외가 발생하지 않으면)

표준에 따라 구현 된 NaN은 부등식 비교 자체와 True를 반환해야하는 유일한 값입니다.

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

그리고 몇 가지 예 :

import numpy as np
values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
    print(f"{repr(value):<8} : {is_nan(value)}")

산출:

nan      : True
nan      : True
55       : False
'string' : False
<function <lambda> at 0x000000000927BF28> : False


답변

나는 실제로 이것에 부딪쳤다. 그러나 나를 위해 그것은 nan, -inf 또는 inf를 점검하고 있었다. 방금 사용한

if float('-inf') < float(num) < float('inf'):

이것은 숫자에 해당되고 nan과 inf에 대해서는 false이며 문자열 또는 다른 유형 (아마도 좋은 것)에 대한 예외가 발생합니다. 또한 이것은 math 또는 numpy와 같은 라이브러리를 가져올 필요가 없습니다 (numpy는 너무 커서 컴파일 된 응용 프로그램의 크기를 두 배로 늘립니다).


답변

math.isnan ()

또는 숫자를 자체와 비교하십시오. NaN이 항상입니다! = (이 경우 예를 들어, NaN를, 그렇지 않으면 입니다 숫자) 비교 성공한다.