Как я могу проверить значения NaN?
float('nan')
результаты в Nan (не число). Но как это проверить? Должно быть очень легко, но я не могу найти его.
13 ответов
проверяет, является ли float x NaN (не число). NaNs являются частью стандартов IEEE 754. Операция, подобная inf * 0, inf / inf или любой операции с участием NaN, например nan * 1, возвращает NaN.
новое в версии 2.6.
>>> import math
>>> x=float('nan')
>>> math.isnan(x)
True
>>>
Я на самом деле просто столкнулся с этим, но для меня это была проверка на nan, -inf или inf. Я просто использовал
if float('-inf') < float(num) < float('inf'):
Это верно для чисел, ложно для nan и обоих inf, и вызовет исключение для таких вещей, как строки или другие типы (что, вероятно, хорошо). Также это не требует импорта каких-либо библиотек, таких как math или numpy (numpy настолько чертовски большой, что удваивает размер любого скомпилированного приложения).
или сравните число с самим собой. Нэн всегда != NaN, в противном случае (например, если это is число) сравнение должно быть успешным.
вот ответ, работающий с:
- python неуникальный Нэн:
float('nan')
- включает в себя уникальный Нэн (синглтон) :
np.nan
- любые другие объекты: строка или что-то еще (не вызывает исключений, если встречается)
вот это:
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
С python
def isNaN(x):
return str(float(x)).lower() == 'nan'
это работает для меня с python 2.5.1 на коробке Solaris 5.9 и с python 2.6.5 на Ubuntu 10
Ну, я вошел в этот пост, потому что у меня были некоторые проблемы с функцией:
math.isnan()
при запуске этого кода возникают проблемы:
a = "hello"
math.isnan(a)
это вызывает исключение. Мое решение для этого-сделать еще одну проверку:
def is_nan(x):
return isinstance(x, float) and math.isnan(x)
все методы, чтобы сказать, является ли переменная 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()
тип 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
я получаю данные от веб-службы, которая отправляет 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
для nan типа float
>>> 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
для строк в panda take 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