How to Drop Rows with NaN Values in Pandas DataFrame

In this short guide, I’ll show you how to drop rows with NaN values in Pandas DataFrame.

To start, here is the syntax that you may apply in order drop rows with NaN values in your DataFrame:

df.dropna()

In the next section, I’ll review the steps to apply the above syntax in practice.

Steps to Drop Rows with NaN Values in Pandas DataFrame

Step 1: Create a DataFrame with NaN Values

Let’s say that you have the following dataset:

values_1values_2
700DDD
ABC150
500350
XYZ400
12005000

You can then capture the above data in Python by creating a DataFrame:

import pandas as pd

df = pd.DataFrame({'values_1': ['700','ABC','500','XYZ','1200'],
                   'values_2': ['DDD','150','350','400','5000'] 
                   })

print (df)

Once you run the code, you’ll get this DataFrame:

DataFrame Python

Notice that the DataFrame contains both:

  • Numeric data: 700, 500, 1200, 150 , 350 ,400, 5000
  • Non-numeric values: ABC, XYZ, DDD

You can then use to_numeric in order to convert the values in the dataset into a float format. But since 3 of those values are non-numeric, you’ll get a ‘NaN’ result for those 3 values.

Here is the code that you may then use to get the NaN values:

import pandas as pd

df = pd.DataFrame({'values_1': ['700','ABC','500','XYZ','1200'],
                   'values_2': ['DDD','150','350','400','5000'] 
                   })

df = df.apply (pd.to_numeric, errors='coerce')

print (df)

As you may observe, the first, second and fourth rows now have NaN values:

NaN values in DataFrame

Step 2: Drop the Rows with NaN Values in Pandas DataFrame

To drop all the rows with the NaN values, you may use df.dropna().

Here is the complete Python code to drop those rows with the NaN values:

import pandas as pd

df = pd.DataFrame({'values_1': ['700','ABC','500','XYZ','1200'],
                   'values_2': ['DDD','150','350','400','5000'] 
                   })

df = df.apply (pd.to_numeric, errors='coerce')
df = df.dropna()

print (df)

Run the code, and you’ll only see two rows without any NaN values:

Drop Rows with NaN Values in Pandas DataFrame

You may notice that those two rows no longer have a sequential index. It is currently 2 and 4. You can then reset the index to start from 0.

Step 3 (Optional): Reset the Index

You can apply the following syntax to reset an index in pandas DataFrame:

df.reset_index(drop=True)

So this is the full Python code to drop the rows with the NaN values, and then reset the index:

import pandas as pd

df = pd.DataFrame({'values_1': ['700','ABC','500','XYZ','1200'],
                   'values_2': ['DDD','150','350','400','5000'] 
                   })

df = df.apply (pd.to_numeric, errors='coerce')
df = df.dropna()
df = df.reset_index(drop=True)

print (df)

You’ll now notice that the index starts from 0:

Drop Rows with NaN Values in Pandas DataFrame