# Check for NaN Values in Python

The `nan` is a constant that indicates that the given value is not legal - `Not a Number`.

Note that `nan` and `NULL` are two different things. `NULL` value indicates something that doesn’t exist and is empty.

In Python, we deal with such values very frequently in different objects. So it is necessary to detect such constants.

In Python, we have the `isnan()` function, which can check for `nan` values. And this function is available in two modules- `NumPy` and `math`. The `isna()` function in the `pandas` module can also check for `nan` values.

## Use the `math.isnan()` Function to Check for `nan` Values in Python

The `isnan()` function in the `math` library can be used to check for `nan` constants in float objects. It returns `True` for every such value encountered. For example:

``````import math
import numpy as np

b = math.nan
print(np.isnan(b))
``````

Output:

``````True
``````

Note that the `math.nan` constant represents a `nan` value.

## Use the `numpy.isnan()` Function to Check for `nan` Values in Python

The `numpy.isnan()` function can check in different collections like lists, arrays, and more for `nan` values. It checks each element and returns an array with `True` wherever it encounters `nan` constants. For example:

``````import numpy as np

a = np.array([5, 6, np.NaN])

print(np.isnan(a))
``````

Output:

``````[False False  True]
``````

`np.NaN()` constant represents also a `nan` value.

## Use the `pandas.isna()` Function to Check for `nan` Values in Python

The `isna()` function in the `pandas` module can detect `NULL` or `nan` values. It returns `True` for all such values encountered. It can check for such values in a DataFrame or a Series object as well. For example,

``````import pandas as pd
import numpy as np

ser = pd.Series([5, 6, np.NaN])

print(pd.isna(ser))
``````

Output:

``````0    False
1    False
2     True
dtype: bool
``````

## Use the `obj != obj` to Check for `nan` Values in Python

For any object except `nan`, the expression `obj == obj` always returns `True`. For example,

``````print([] == [])
print("1" == "1")
print([1, 2, 3] == [1, 2, 3])
print(float("nan") == float("nan"))
``````

Therefore, we could use `obj != obj` to check if the value is `nan`. It is `nan` if the return value is `True`.

``````import math
b = math.nan

def isNaN(num):
return num != num

print(isNaN(b))
``````

Output:

``````True
``````

This method however, might fail with lower versions of Python (<=Python 2.5).

Contribute
DelftStack is a collective effort contributed by software geeks like you. If you like the article and would like to contribute to DelftStack by writing paid articles, you can check the write for us page.

## Related Article - Python Math

• Fibonacci Sequence in Python
• Ceiling Division in Python