답변:
반환
True
x는 NaN (숫자), 및 경우False
그렇지.
>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True
math.isnan
선호 np.isnan()
?
import numpy
반면, RAM의 약 15 MB 소요 import math
일부 0.2 MB 소요
numpy.isnan
NumPy 배열을 처리하므로 탁월한 선택입니다. NumPy를 사용하지 않는 경우 NumPy 종속성을 가져 와서 NaN 검사를 위해 NumPy를로드하는 데 시간을 소비하는 이점은 없습니다 (그러나 NaN 검사를 수행하는 코드 종류를 작성하는 경우 사용해야 합니다) NumPy).
NaN을 테스트하는 일반적인 방법은 그것이 자신과 같은지 확인하는 것입니다.
def isNaN(num):
return num != num
numpy.isnan(number)
NaN
그렇지 않은 경우 알려줍니다 .
numpy.all(numpy.isnan(data_list))
목록의 모든 요소가 난인지 확인해야하는 경우에도 유용합니다.
all(map(math.isnan, [float("nan")]*5))
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
ps.isna()
내 문제를 해결합니다. 감사!
다음은 작업에 대한 답변입니다.
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
numpy.nan
는에서 float
반환 한 것과 같은 일반적인 파이썬 객체 float('nan')
입니다. NumPy에서 만나는 대부분의 NaN은 numpy.nan
객체 가 아닙니다 .
numpy.nan
C의 기본 라이브러리에서 자체적 으로 NaN 값 을 정의합니다 . 파이썬의 NaN을 감싸지 않습니다. 그러나 현재 C99 API를 사용하므로 IEEE 754 표준을 준수합니다.
float('nan') is float('nan')
(비 고유) 및 np.nan is np.nan
(고유)
np.nan
각 float('nan')
호출은 새 객체를 생성하는 동안 특정 객체입니다. 당신이했다면, 당신도 nan = float('nan')
얻을 것이다 nan is nan
. 당신이 구축되면 실제 같은과 NumPy와 NaN의를 np.float64('nan')
, 다음 당신은 얻을 것 np.float64('nan') is not np.float64('nan')
너무 .
나는 실제로 이것에 부딪쳤다. 그러나 나를 위해 그것은 nan, -inf 또는 inf를 점검하고 있었다. 방금 사용한
if float('-inf') < float(num) < float('inf'):
이것은 숫자에 해당되고 nan과 inf에 대해서는 false이며 문자열 또는 다른 유형 (아마도 좋은 것)에 대한 예외가 발생합니다. 또한 이것은 math 또는 numpy와 같은 라이브러리를 가져올 필요가 없습니다 (numpy는 너무 커서 컴파일 된 응용 프로그램의 크기를 두 배로 늘립니다).
math.isfinite
@DaveTheScientist의 답변을 2012 년에 게시 한 것은 정확히 "바퀴를 재발견"한 것이 아닙니다. 해결책은 여전히 Python 2를 사용하는 사람들을 나타냅니다.
또는 숫자를 자체와 비교하십시오. NaN이 항상입니다! = (이 경우 예를 들어, NaN를, 그렇지 않으면 입니다 숫자) 비교 성공한다.
함수에 문제가 있기 때문에 글을 올렸습니다.
math.isnan()
이 코드를 실행할 때 문제가 있습니다.
a = "hello"
math.isnan(a)
예외가 발생합니다. 그에 대한 나의 해결책은 다른 점검을하는 것입니다.
def is_nan(x):
return isinstance(x, float) and math.isnan(x)
def is_nan(x): try: return math.isnan(x) except: return False
NaN
string으로 보내는 웹 서비스에서 데이터를 수신하고 있습니다 '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
try: int(value)
value
존재 에 대해 무엇을 말 NaN
합니까?
NaN
(파이썬에서 얻을 수있는 것과 같은 것 float('inf') * 0
). 따라서 문자열 'Hello'는 숫자는 아니지만 여전히 숫자 값 NaN
이기 때문에 아닙니다 NaN
!
int(value)
모든 예외에 False
대해 작성됩니다.
변수가 NaN인지 또는 없음인지 확인하는 모든 방법 :
타입 없음
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()
NaN 타입
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
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]
단락 평가는 오른쪽을 평가하지 않고 신속하게 평가 isnan
하므로 'float'유형이 아닌 값에서는 호출되지 않습니다 .False and (…)
False
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')
자체와 같은지 확인하는 것 같습니다.
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)
팬더의 문자열은 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