Examples of how to drop (remove) dataframe rows that contain NaN with pandas:

### Create a dataframe with pandas

Let's consider the following dataframe

`import pandas as pd`

`import numpy as np`

`A = np.random.randint(1,100, size=(10,3))`

`A = A * 1.0`

`n = 6`

`index = np.random.choice(A.size, n, replace=False)`

`A.ravel()[index] = np.nan`

`df = pd.DataFrame(A)`

`print(df)`

returns

`0 1 2`

`0 60.0 42.0 43.0`

`1 47.0 87.0 99.0`

`2 80.0 44.0 48.0`

`3 48.0 NaN 46.0`

`4 NaN 90.0 NaN`

`5 99.0 61.0 63.0`

`6 NaN 35.0 NaN`

`7 95.0 56.0 13.0`

`8 29.0 80.0 52.0`

`9 83.0 NaN 87.0`

### Find rows with NaN

First, to find the indexes of rows with NaN, a solution is to do:

`index_with_nan = df.index[df.isnull().any(axis=1)]`

`print(index_with_nan)`

which returns here:

`Int64Index([3, 4, 6, 9], dtype='int64')`

### Find the number of NaN per row

It is also possible to get the number of NaNs per row:

`print(df.isnull().sum(axis=1))`

returns

`0 0`

`1 0`

`2 0`

`3 1`

`4 2`

`5 0`

`6 2`

`7 0`

`8 0`

`9 1`

`dtype: int64`

### Drop rows with NaN

To drop rows with NaN:

`df.drop(index_with_nan,0, inplace=True)`

`print(df)`

returns

`0 1 2`

`0 60.0 42.0 43.0`

`1 47.0 87.0 99.0`

`2 80.0 44.0 48.0`

`5 99.0 61.0 63.0`

`7 95.0 56.0 13.0`

`8 29.0 80.0 52.0`

### Drop rows with NaN in a given column

Another example, removing rows with NaN in column of index 1:

`print( df.iloc[:,1].isnull() )`

gives

`0 False`

`1 False`

`2 False`

`3 True`

`4 False`

`5 False`

`6 False`

`7 False`

`8 False`

`9 True`

`Name: 1, dtype: bool`

and then

`index_with_nan = df.index[df.iloc[:,1].isnull()]`

`df.drop(index_with_nan,0, inplace=True)`

`print(df)`

returns

`0 1 2`

`0 60.0 42.0 43.0`

`1 47.0 87.0 99.0`

`2 80.0 44.0 48.0`

`4 NaN 90.0 NaN`

`5 99.0 61.0 63.0`

`6 NaN 35.0 NaN`

`7 95.0 56.0 13.0`

`8 29.0 80.0 52.0`