# Tutorial :How can I check for NaN in Python?

### Question:

`float('nan')` results in Nan (not a number). But how do I check for it? Should be very easy, but I cannot find it.

### Solution:1

math.isnan()

Checks if the float x is a NaN (not a number). NaNs are part of the IEEE 754 standards. Operation like but not limited to inf * 0, inf / inf or any operation involving a NaN, e.g. nan * 1, return a NaN.

New in version 2.6.

``>>> import math  >>> x=float('nan')  >>> math.isnan(x)  True  >>>   ``

### Solution:2

The usual way to test for a NaN is to see if it's equal to itself:

``def isNaN(num):      return num != num  ``

### Solution:3

`numpy.isnan(number)` tells you if it's `NaN` or not in Python 2.5.

### Solution:4

I actually just ran into this, but for me it was checking for nan, -inf, or inf. I just used

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

This is true for numbers, false for nan and both inf, and will raise an exception for things like strings or other types (which is probably a good thing). Also this does not require importing any libraries like math or numpy (numpy is so damn big it doubles the size of any compiled application).

### Solution:5

math.isnan()

or compare the number to itself. NaN is always != NaN, otherwise (e.g. if it is a number) the comparison should succeed.

### Solution:6

Another method if you're stuck on <2.6, you don't have numpy, and you don't have IEEE 754 support:

``def isNaN(x):      return str(x) == str(1e400*0)  ``

### Solution:7

With python < 2.6 I ended up with

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

This works for me with python 2.5.1 on a Solaris 5.9 box and with python 2.6.5 on Ubuntu 10

### Solution:8

here is an answer working with:

• python non-unique NaN: `float('nan')`
• numpy unique NaN (singleton) : `np.nan`
• any other objects: string or whatever (does not raise exceptions if encountered)

Here it is:

``import numpy as np    def is_nan(x):      return (x is np.nan or x != x)  ``

And some examples:

``values = [float('nan'), np.nan, 55, "string", lambda x : x]  for value in values:      print "{:<8} : {}".format(repr(value), is_nan(value))  ``

Output:

``nan      : True  nan      : True  55       : False  'string' : False  <function <lambda> at 0x000000000927BF28> : False  ``

### Solution:9

Well I entered this post, because i've had some issues with the function:

``math.isnan()  ``

There are problem when you run this code:

``a = "hello"  math.isnan(a)  ``

It raises exception. My solution for that is to make another check:

``def is_nan(x):      return isinstance(x, float) and math.isnan(x)  ``

### Solution:10

I am receiving the data from a web-service that sends `NaN` as a string `'Nan'`. But there could be other sorts of string in my data as well, so a simple `float(value)` could throw an exception. I used the following variant of the accepted answer:

``def isnan(value):    try:        import math        return math.isnan(float(value))    except:        return False  ``

Requirement:

``isnan('hello') == False  isnan('NaN') == True  isnan(100) == False  isnan(float('nan')) = True  ``

### Solution:11

All the methods to tell if the variable is NaN or None:

None type

``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 type

``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  ``

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »