float('nan')
Результаты Нан (не число). Но как я могу это проверить? Должно быть очень легко, но я не могу найти его.Как я могу проверить NaN в Python?
ответ
Проверяет поплавок х является NaN (не число). NaN являются частью стандартов IEEE 754. Операции, такие как, но не ограничиваясь, inf * 0, inf/inf или любая операция с использованием NaN, например. nan * 1, верните NaN.
Новое в версии 2.6.
>>> import math
>>> x=float('nan')
>>> math.isnan(x)
True
>>>
новый в версии 2.6 – gimel
это не удается, если строка, которая тестируется как число, не является числом. Необходимо использовать isdigit в этих случаях. – Joel
Обратите внимание, что это работает одинаково с 'float (" nan ")', как это происходит с 'numpy.core.numeric.NaN', в то время как сравнение двух с' is' не работает. Следовательно, это может быть предпочтительное решение в коде (legacy?), Возможно содержащее оба определения, если я не ошибаюсь? – jhin
Обычный способ проверить на NaN, чтобы увидеть, если он равен самому себе:
def isNaN(num):
return num != num
Слово предупреждения: цитируя комментарий медведя ниже «Для людей, застрявших с python <= 2.5. Nan! = Nan не работает надежно. Вместо этого используется numpy». Сказав это, я на самом деле никогда не видел, чтобы он терпел неудачу. – mavnn
Я уверен, что, учитывая перегрузку оператора, есть много способов, которыми я мог бы смутить эту функцию. перейдите с помощью math.isnan() – djsadinoff
В упомянутой выше спецификации 754 указано, что NaN == NaN всегда должно быть ложным, хотя оно не всегда реализуется как таковое. Разве это невозможно, так как математика и/или numpy проверяют это под капотом в любом случае? –
или сравнить число себе. NaN всегда! = NaN, в противном случае (например, если оно равно номер), сравнение должно быть успешным.
Для людей, застрявших с python <= 2.5. Нань! = Нэн не работал надежно. Вместо этого используется numpy. – Bear
Другой метод, если вы застряли на < 2.6, вы не имеете NumPy, и у вас нет IEEE 754 поддержка:
def isNaN(x):
return str(x) == str(1e400*0)
С питоном < 2,6 я закончил с
def isNaN(x):
return str(float(x)).lower() == 'nan'
Это работает для меня с питоном 2.5.1 на коробке Solaris 5.9 и питона 2.6.5 на Ubuntu 10
Это не слишком портативно, поскольку Windows иногда вызывает это '-1. # IND' –
Ну, я вошел в этот пост, потому что я имел некоторые проблемы с фу nction:
math.isnan()
Есть проблема при запуске этого кода:
a = "hello"
math.isnan(a)
Это вызывает исключение. Мое решение для того, чтобы сделать еще один чек:
def is_nan(x):
return isinstance(x, float) and math.isnan(x)
Почему downvote? –
Возможно, это было опущено, потому что isnan() принимает float, а не строку. В этой функции нет ничего плохого, и проблемы связаны только с его попыткой ее использования. (Для этого конкретного случая использования его решение действительно, но это не ответ на этот вопрос.) –
Будьте осторожны с проверкой типов таким образом. Это не будет работать, например. для numpy.float32 NaN. Лучше использовать Try/за исключением строительства: определение функции is_nan (х): попытка: возвращение math.isnan (х) кроме: возвращение false' – Rob
Я на самом деле просто врезался в это, но для меня это была проверка на нан, -INF или инф. Я просто использовал
if float('-inf') < float(num) < float('inf'):
Это справедливо для чисел, ложно для нан и как инф, и возбудит исключение для таких вещей, как строки или других типов (которые, вероятно, хорошая вещь). Также это не требует импорта каких-либо библиотек, таких как математика или numpy (numpy настолько проклят, что он удваивает размер любого скомпилированного приложения).
'math.isfinite' не была введена до Python 3.2, поэтому, учитывая ответ от @DaveTheScientist, был опубликован в 2012 году, изобретать колесо »- решение по-прежнему стоит тем, кто работает с Python 2. –
Я получаю данные с веб-службы, которая отправляет 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
или' try: int (value) ' – chwi
@chwi, так что ваше предложение говорит о том, что' value' является 'NaN' или нет? – Mahdi
Ну, будучи «не числом», все, что нельзя отличить от int, я предполагаю, что на самом деле это не число, и утверждение try не получится? Попробуйте, верните true, кроме return false. – chwi
Все методы, чтобы сказать, если переменная является 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:
float('nan')
- Numpy уникальный NaN (Singleton):
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
- 1. Как я могу проверить ввод в python?
- 2. Как проверить NaN в муле
- 3. Как проверить NaN в golang
- 4. Как я могу удалить Nan из списка Python/NumPy
- 5. Как я могу исправить энтропию, уступающую nan?
- 6. Как проверить NaN на схеме?
- 7. Как проверить значение ошибки NaN
- 8. Как проверить список, содержащий NaN
- 9. Как проверить значения NaN в d3?
- 10. Проверить для NaN в ClojureScript
- 11. В Python, как я могу проверить размер объекта StringIO?
- 12. как я могу проверить абстрактный метод в Python 2.6
- 13. Как я могу проверить, чтобы вводить только цифры в Python?
- 14. Как я могу проверить ввод пользователя в python?
- 15. В python, как я могу проверить, имеет ли объект значение?
- 16. Использование Python, как я могу проверить почтовый индекс в Великобритании?
- 17. Проверить NAN значения Java
- 18. проверить номер NaN
- 19. Как я могу поднять ошибку, если вход NaN?
- 20. Как я могу проверить интерфейс?
- 21. Как я могу проверить пароль?
- 22. Как я могу проверить validate_uniqueness_of?
- 23. Как я могу проверить это?
- 24. Как я могу проверить «prevObject»?
- 25. Как я могу проверить сообщение?
- 26. Как я могу это проверить?
- 27. Как я могу проверить stunnel?
- 28. Как я могу проверить класс?
- 29. Как я могу проверить RoutedUICommand?
- 30. Как я могу это проверить?
Для некоторых истории NaN в Python см PEP 754. Http: // www.python.org/dev/peps/pep-0754/ –
'numpy.isnan (numpy.nan)' затем вернет 'True'. И, очевидно, «import numpy» перед этим. :) –