13 ответов:
проверяет, является ли float x NaN (не число). NaNs являются частью стандартов IEEE 754. Операция как, но не ограничиваясь к INF * 0, неофициальный документ INF / INF или любой операции с участием Нэн, например, НАН * 1, возвращает значение NaN.
новое в версии 2.6.
>>> import math >>> x=float('nan') >>> math.isnan(x) True >>>
обычный способ проверить для NaN, чтобы увидеть, если он равен себе:
def isNaN(num): return num != num
Я на самом деле просто столкнулся с этим, но для меня это была проверка на nan, -inf или inf. Я просто использовал
if float('-inf') < float(num) < float('inf'):Это верно для чисел, ложно для nan и обоих inf, и вызовет исключение для таких вещей, как строки или другие типы (что, вероятно, хорошо). Также это не требует импорта каких-либо библиотек, таких как math или numpy (numpy настолько чертовски большой, что он удваивает размер любого скомпилированного приложения).
или сравнить число с самим собой. Нэн всегда такая != NaN, в противном случае (например, если это и число) сравнение должно быть успешным.
вот ответ, работающий с:
- python неуникальный NaN:
float('nan')- включает в себя уникальный Нэн (синглтон) :
np.nan- любые другие объекты: string или что-то еще (не вызывает исключений, если они встречаются)
вот это:
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 box и с 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 или нет:
Нет Тип
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 возьмите 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
Comments