Как проверить наличие NaN-значений?

float('nan') приводит к Nan (не числу). Но как мне проверить это? Это должно быть очень просто, но я не могу найти.

Комментарии к вопросу (2)
Решение

math.isnan(x)

Возвращает True, если x - NaN (не число), и False в противном случае.

>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True
Комментарии (15)

Обычно NaN проверяется на равенство самому себе:

def isNaN(num):
    return num != num
Комментарии (5)

и NumPy.isnan(количество) говорит вам, если это'ы Нана или нет.

Комментарии (8)

На самом деле я просто столкнулся с этим, но для меня это была проверка на Нэн, -инф или INF. Я просто использовал

if float('-inf') < float(num) < float('inf'):

Это справедливо и для чисел, false для НЭН и оба INF и будет вызывать исключение для таких вещей, как струны и прочая (что наверное хорошо). Также для этого не требуется импортировать все библиотеки, как математика или библиотеки numpy (и NumPy так чертовски большой, он удваивает размер скомпилированного приложения).

Комментарии (1)

вот это ответ, работающих с:

  • питон non-unique Нэн: поплавок(&#39;НАНА&#39;)
  • и NumPy unique Нана (синглтон) : `НП.Нань
  • любые другие объекты: 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 "{:
Комментарии (1)

Вот три способа, где вы можете проверить переменную является "Нана" или нет.

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 : правда ``

Комментарии (1)

math.isnan()

или сравнить число с самим собой. NaN всегда != NaN, в противном случае (например, если это есть число) сравнение должно быть успешным.

Комментарии (1)

Еще один метод, если вы'вновь застрял на <2.6, вы не'Т есть NumPy и вы Don't есть поддержка стандарта IEEE 754:

def isNaN(x):
    return str(x) == str(1e400*0)
Комментарии (0)

Ну я вошел в этот пост, потому что я'вэ были некоторые проблемы с функцией:

math.isnan()

Есть проблемы, когда вы запустите этот код:

a = "hello"
math.isnan(a)

Это вызывает исключение. Мое решение для этого-сделать еще одну проверку:

def is_nan(x):
    return isinstance(x, float) and math.isnan(x)
Комментарии (4)

С Python < 2.6 я закончил с

def isNaN(x):
    return str(float(x)).lower() == 'nan'

Это работает для меня с Python 2.5.1 на Солярис 5.9 окно и с помощью Python 2.6.5 на Ubuntu 10

Комментарии (1)

Все способы сказать, если переменная является Нэн или нет:

Ни один тип

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 "", line 1, in 
    math.isnan(a)
TypeError: a float is required

In [10]: len(a) == 0
Traceback (most recent call last):
  File "", line 1, in 
    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
Комментарии (0)

Я получаю данные из веб-службы, которая отправляет Нана строкой &#39;Нана&#39;. Но есть и другие виды строк в моих данных, так что простой поплавок(значения) может бросить исключение. Я использовал следующий вариант принято отвечать:

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
Комментарии (4)

Как удалить Нана (поплавок) пункт(ы) из списка смешанных типов данных

Если у вас есть смешанные типы в итерируемый, вот решение, которое не использует библиотеки 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не назовут на ценностях, которые не типа &#39;поплавка&#39;, какложные и ( ... ) быстро ложном значении` без того, чтобы оценить правой стороны.

Комментарии (0)

для НЭН типа float

>>> import pandas as pd
>>> value = float(nan)
>>> type(value)
>>> 
>>> pd.isnull(value)
True
>>>
>>> value = 'nan'
>>> type(value)
>>> 
>>> pd.isnull(value)
False
Комментарии (0)

для строк в 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
Комментарии (1)