NaN is short for **Not a number**. It is used to represent entries that are undefined. It is also used for representing missing values in a dataset.

The concept of NaN existed even before Python was created. IEEE Standard for Floating-Point Arithmetic (IEEE 754) introduced NaN in 1985.

NaN is a special floating-point value which cannot be converted to any other type than float.

In this tutorial we will look at how NaN works in Pandas and Numpy.

## NaN in Numpy

Let’s see how NaN works under Numpy. To observe the properties of NaN let’s create a Numpy array with NaN values.

```
import numpy as np
arr = np.array([1, np.nan, 3, 4, 5, 6, np.nan])
pritn(arr)
```

Output :

```
[ 1. nan 3. 4. 5. 6. nan]
```

### 1. Mathematical operations on a Numpy array with NaN

Let’s try calling some basic functions on the Numpy array.

```
print(arr.sum())
```

Output :

```
nan
```

Let’ try finding the maximum from the array :

```
print(arr.max())
```

Output :

```
nan
```

Thankfully Numpy offers methods that ignore the NaN values while performing Mathematical operations.

### 2. How to ignore NaN values while performing Mathematical operations on a Numpy array

Numpy offers you methods like np.nansum() and np.nanmax() to calculate sum and max after ignoring NaN values in the array.

```
np.nansum(arr)
```

Output :

```
19.0
```

```
np.nanmax(arr)
```

```
6.0
```

If you have your autocompletion on in your IDE, you will see the following list of options while working with np.nan :

### 3. Checking for NaN values

To check for NaN values in a Numpy array you can use the np.isnan() method.

This outputs a boolean mask of the size that of the original array.

```
np.isnan(arr)
```

Output :

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

The output array has true for the indices which are NaNs in the original array and false for the rest.

### 4. Equating two nans

**Are two NaNs equal to one another? **

This can be a confusing question. Let’s try to answer it by running some python code.

```
a = np.nan
b = np.nan
```

These two statements initialize two variables, a and b with nan. Let’s try equating the two.

```
a == b
```

Output :

```
False
```

In Python we also have the** is** operator. Let’s try using that to compare the two variables.

```
a is b
```

Output :

```
True
```

The reason for this is that == operator compares the values of both the operands and checks for value equality. `is operator`

, on the other hand, checks whether both the operands refer to the same object or not.

In fact, you can print out the IDs of both a and b and see that they refer to the same object.

```
id(a)
```

Output :

```
139836725842784
```

```
id(b)
```

Output :

```
139836725842784
```

## NaN in Pandas Dataframe

Pandas DataFrames are a common way of importing data into python. Let’s see how can we deal with NaN values in a Pandas Dataframe.

Let’s start by creating a dataframe.

```
s = pd.DataFrame([(0.0, np.nan, -2.0, 2.0),
... (np.nan, 2.0, np.nan, 1),
... (2.0, 5.0, np.nan, 9.0),
... (np.nan, 4.0, -3.0, 16.0)],
... columns=list('abcd'))
s
```

Output :

### 1. Checking for NaN values

You can check for NaN values by using the** isnull() method**. The output will be a boolean mask with dimensions that of the original dataframe.

```
s.isnull()
```

Output :

### 2. Replacing NaN values

There are multiple ways to replace NaN values in a Pandas Dataframe. The most common way to do so is by using the **.fillna() method. **

This method requires you to specify a value to replace the NaNs with.

```
s.fillna(0)
```

Output :

Alternatively, you can also mention the values column-wise. That means all the NaNs under one column will be replaced with the same value.

```
values = {'a': 0, 'b': 1, 'c': 2, 'd': 3}
s.fillna(value=values)
```

Output :

You can also use interpolation to fill the missing values in a data frame. Interpolation is a slightly advanced method as compared to .fillna().

Interpolation is a technique with which you can estimate unknown data points between two known data points.

### 3. Drop rows containing NaN values

To drop the rows or columns with NaNs you can use the** .dropna() **method.

To drop rows with NaNs use:

```
df.dropna()
```

To drop columns with NaNs use :

```
df.dropna(axis='columns')
```

## Conclusion

This tutorial was about NaNs in Python. We majorly focused on dealing with NaNs in Numpy and Pandas. Hope you had fun learning with us.