etc./StackOverFlow

NaN 값을 어떻게 확인할 수 있습니까?

청렴결백한 만능 재주꾼 2023. 4. 24. 06:48
반응형

질문자 :Jack Ha


float('nan') 결과는 Nan(숫자가 아님)이 됩니다. 하지만 어떻게 확인합니까? 아주 쉬워야 하는데 못 찾겠어요.



math.isnan(x)

x가 NaN(숫자가 아님)이면 True 반환 False 반환합니다.

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

gimel

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

 def isNaN(num): return num != num

Chris Jester-Young

numpy.isnan(number) 은 그것이 NaN 인지 아닌지 알려줍니다.


mavnn

다음은 변수가 "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

M. Hamza Rajput

다음은 작업하는 답변입니다.

  • 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

x0s

나는 실제로 이것에 부딪쳤지만 나를 위해 그것은 nan, -inf 또는 inf를 확인하고 있었습니다. 나는 방금 사용

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

이것은 숫자의 경우 true이고 nan 및 inf의 경우 false이며 문자열 또는 기타 유형(아마도 좋은 일임)과 같은 항목에 대해 예외를 발생시킵니다. 또한 이것은 수학이나 numpy와 같은 라이브러리를 가져올 필요가 없습니다(numpy는 너무 커서 컴파일된 응용 프로그램의 크기가 두 배가 됩니다).


DaveTheScientist

자신과 같은지 확인하는 것 같다.

 x!=x

가장 빠릅니다.

 import pandas as pd import numpy as np import math x = float('nan') %timeit x!=x 44.8 ns ± 0.152 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) %timeit math.isnan(x) 94.2 ns ± 0.955 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) %timeit pd.isna(x) 281 ns ± 5.48 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) %timeit np.isnan(x) 1.38 µs ± 15.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Grzegorz

math.isnan()

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


Tomalak

기능에 몇 가지 문제가 있었기 때문에 이 게시물을 입력했습니다.

 math.isnan()

이 코드를 실행할 때 문제가 있습니다.

 a = "hello" math.isnan(a)

예외가 발생합니다. 이에 대한 나의 해결책은 또 다른 확인을 하는 것입니다.

 def is_nan(x): return isinstance(x, float) and math.isnan(x)

Idok

<2.6에 갇힌 경우 다른 방법은 numpy가없고 IEEE 754 지원이 없습니다.

 def isNaN(x): return str(x) == str(1e400*0)

Josh Lee

파이썬 <2.6으로 나는 결국

 def isNaN(x): return str(float(x)).lower() == 'nan'

이것은 Solaris 5.9 상자의 python 2.5.1 및 Ubuntu 10의 python 2.6.5에서 작동합니다.


Mauro Bianchi

NaN 을 문자열 'Nan' 으로 보내는 웹 서비스에서 데이터를 수신하고 있습니다. 그러나 내 데이터에도 다른 종류의 문자열이 있을 수 있으므로 간단한 float(value) 예외가 발생할 수 있습니다. 허용되는 답변의 다음 변형을 사용했습니다.

 def isnan(value): try: import math return math.isnan(float(value)) except: return False

요구 사항:

 isnan('hello') == False isnan('NaN') == True isnan(100) == False isnan(float('nan')) = True

Mahdi

변수가 NaN인지 None인지 알려주는 모든 방법:

없음 유형

 In [1]: from numpy import math In [2]: a = None In [3]: not a Out[3]: True In [4]: len(a or ()) == 0 Out[4]: True In [5]: a == None Out[5]: True In [6]: a is None Out[6]: True In [7]: a != a Out[7]: False In [9]: math.isnan(a) Traceback (most recent call last): File "<ipython-input-9-6d4d8c26d370>", line 1, in <module> math.isnan(a) TypeError: a float is required In [10]: len(a) == 0 Traceback (most recent call last): File "<ipython-input-10-65b72372873e>", line 1, in <module> len(a) == 0 TypeError: object of type 'NoneType' has no len()

난형

 In [11]: b = float('nan') In [12]: b Out[12]: nan In [13]: not b Out[13]: False In [14]: b != b Out[14]: True In [15]: math.isnan(b) Out[15]: True

siberiawolf61

혼합 데이터 유형 목록에서 NaN(float) 항목을 제거하는 방법

iterable에 혼합 유형이 있는 경우 다음은 numpy를 사용하지 않는 솔루션입니다.

 from math import isnan Z = ['a','b', float('NaN'), 'd', float('1.1024')] [x for x in Z if not ( type(x) == float # let's drop all float values… and isnan(x) # … but only if they are nan )]
 ['a', 'b', 'd', 1.1024]

단락 평가는 False and (…) 우변을 평가할 필요 없이 False 빠르게 평가되기 isnan 이 'float' 유형이 아닌 값에 대해 호출되지 않음을 의미합니다.


sleblanc

Python 3.6에서 문자열 값 x math.isnan(x) 및 np.isnan(x)을 확인하면 오류가 발생합니다. 그래서 나는 그것이 숫자인지 미리 알지 못하면 주어진 값이 NaN인지 아닌지 확인할 수 없습니다. 다음은 이 문제를 해결하는 것 같습니다

 if str(x)=='nan' and type(x)!='str': print ('NaN') else: print ('non NaN')

Valentin Goikhman

비교 pd.isna , math.isnannp.isnan 및 서로 다른 유형의 객체를 다루는 유연성.

아래 표는 주어진 방법으로 객체의 유형을 확인할 수 있는지 보여줍니다.

 +------------+-----+---------+------+--------+------+ | Method | NaN | numeric | None | string | list | +------------+-----+---------+------+--------+------+ | pd.isna | yes | yes | yes | yes | yes | | math.isnan | yes | yes | no | no | no | | np.isnan | yes | yes | no | no | yes | <-- # will error on mixed type list +------------+-----+---------+------+--------+------+

pd.isna

다양한 유형의 결측값을 확인하는 가장 유연한 방법입니다.


답변 중 어느 것도 pd.isna . math.isnannp.isnanNaN 값에 대해 True None 또는 문자열과 같은 다른 유형의 객체는 확인할 수 없습니다. 두 방법 모두 오류를 반환하므로 혼합 유형의 목록을 확인하는 것은 번거로울 것입니다. 이것은 pd.isna 가 유연하고 다른 종류의 유형에 대해 올바른 부울을 반환하는 동안입니다.

 In [1]: import pandas as pd In [2]: import numpy as np In [3]: missing_values = [3, None, np.NaN, pd.NA, pd.NaT, '10'] In [4]: pd.isna(missing_values) Out[4]: array([False, True, True, True, True, False])

Erfan

float 유형의 nan의 경우

 >>> import pandas as pd >>> value = float(nan) >>> type(value) >>> <class 'float'> >>> pd.isnull(value) True >>> >>> value = 'nan' >>> type(value) >>> <class 'str'> >>> pd.isnull(value) False

J11

팬더의 문자열은 pd.isnull을 사용합니다.

 if not pd.isnull(atext): for word in nltk.word_tokenize(atext):

NLTK의 특징 추출 기능

 def act_features(atext): features = {} if not pd.isnull(atext): for word in nltk.word_tokenize(atext): if word not in default_stopwords: features['cont({})'.format(word.lower())]=True return features

Max Kleiner

출처 : http:www.stackoverflow.com/questions/944700/how-can-i-check-for-nan-values

반응형