float('nan')
결과는 Nan(숫자가 아님)이 됩니다. 하지만 어떻게 확인합니까? 아주 쉬워야 하는데 못 찾겠어요.
질문자 :Jack Ha
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:
- 다른 모든 객체: 문자열 또는 무엇이든(만날 경우 예외를 발생시키지 않음)
표준에 따라 구현된 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
또는 숫자 자체를 비교하십시오. 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.isnan
및 np.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.isnan
및 np.isnan
은 NaN
값에 대해 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
'etc. > StackOverFlow' 카테고리의 다른 글
ATTACH로 연 SQLite 데이터베이스 파일의 테이블을 어떻게 나열할 수 있습니까? (0) | 2023.04.24 |
---|---|
특정 속성에 대한 LINQ의 Distinct() (0) | 2023.04.24 |
PostgreSQL 데이터베이스의 모든 테이블을 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.24 |
SOAP 대 REST(차이점) (0) | 2023.04.24 |
문자열에서 공백을 어떻게 트리밍합니까? (0) | 2023.04.24 |