Как я могу проверить значения NaN? - PullRequest
744 голосов
/ 03 июня 2009

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

Ответы [ 15 ]

4 голосов
/ 23 июня 2016

Я получаю данные от веб-службы, которая отправляет 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
3 голосов
/ 07 декабря 2016

Все методы, чтобы определить, является ли переменная 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
1 голос
/ 28 января 2019

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

Если у вас есть смешанные типы в итерируемом, вот решение, которое не использует 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 без необходимости вычисления с правой стороны.

0 голосов
/ 17 июля 2018

для строк в панде берут 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
0 голосов
/ 17 июля 2018

Для нан типа 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...