float('nan')
приводит к Nan (не числу). Но как мне проверить это? Это должно быть очень просто, но я не могу найти.
Возвращает
True
, если x - NaN (не число), иFalse
в противном случае.
>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True
Обычно NaN проверяется на равенство самому себе:
def isNaN(num):
return num != num
и NumPy.isnan(количество)
говорит вам, если это'ы Нана
или нет.
На самом деле я просто столкнулся с этим, но для меня это была проверка на Нэн, -инф или INF. Я просто использовал
if float('-inf') < float(num) < float('inf'):
Это справедливо и для чисел, false для НЭН и оба INF и будет вызывать исключение для таких вещей, как струны и прочая (что наверное хорошо). Также для этого не требуется импортировать все библиотеки, как математика или библиотеки numpy (и NumPy так чертовски большой, он удваивает размер скомпилированного приложения).
вот это ответ, работающих с:
поплавок('НАНА')
Вот это:
import numpy as np
def is_nan(x):
return (x is np.nan or x != x)
И некоторые примеры:
values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
print "{:<8} : {}".format(repr(value), is_nan(value))
Выход:
nan : True
nan : True
55 : False
'string' : False
<function <lambda> at 0x000000000927BF28> : False
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)}")
Выход `нет Это'ы ПД.ИСНА : правда Это'с НП.isnan : правда Это'ы по математике.isnan : правда ``
или сравнить число с самим собой. NaN всегда != NaN, в противном случае (например, если это есть число) сравнение должно быть успешным.
Ну я вошел в этот пост, потому что я'вэ были некоторые проблемы с функцией:
math.isnan()
Есть проблемы, когда вы запустите этот код:
a = "hello"
math.isnan(a)
Это вызывает исключение. Мое решение для этого-сделать еще одну проверку:
def is_nan(x):
return isinstance(x, float) and math.isnan(x)
С Python < 2.6 я закончил с
def isNaN(x):
return str(float(x)).lower() == 'nan'
Это работает для меня с Python 2.5.1 на Солярис 5.9 окно и с помощью Python 2.6.5 на Ubuntu 10
Все способы сказать, если переменная является Нэн или нет:
Ни один тип
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
Я получаю данные из веб-службы, которая отправляет Нана
строкой 'Нана'
. Но есть и другие виды строк в моих данных, так что простой поплавок(значения) может бросить исключение. Я использовал следующий вариант принято отвечать:
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
Если у вас есть смешанные типы в итерируемый, вот решение, которое не использует библиотеки 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
)]
в <предварительно>['Это', 'б', 'д', 1.1024]</пре>
Короткое замыкание оценки означает, что isnanне назовут на ценностях, которые не типа 'поплавка', как
ложные и ( ... ) быстро ложном значении` без того, чтобы оценить правой стороны.
для строк в Panda занять ПД.функция 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