Sort Pandas Series

Here is the syntax to sort Pandas Series:

(1) Sort Pandas Series in an ascending order:

ser.sort_values(ascending=True, inplace=True)

(2) Sort Pandas Series in a descending order. In this case, simply set ascending=False:

ser.sort_values(ascending=False, inplace=True)

In this guide, you’ll see how to sort Pandas Series that contains:

  • String/text values
  • Numeric values
  • NaN values

Sort Pandas Series that Contains String/Text Values

To start with a simple example, create Pandas Series that contains string/text values:

import pandas as pd

ser = pd.Series(['Emma', 'Maria', 'Bill', 'William', 'Jill', 'Jack'])

print(ser)

Run the code in Python, and you’ll get the following unsorted Series:

0       Emma
1      Maria
2       Bill
3    William
4       Jill
5       Jack

Let’s say that you’d like to sort the Series in an ascending order.

In that case, you’ll need to add the following syntax to the code:

ser.sort_values(ascending=True, inplace=True)

So the complete code to sort the Series in an ascending order is as follows:

import pandas as pd

ser = pd.Series(['Emma', 'Maria', 'Bill', 'William', 'Jill', 'Jack'])

ser.sort_values(ascending=True, inplace=True)

print(ser)

As you can see, the Series is now sorted in an ascending order, where ‘Bill‘ is the first name while ‘William‘ is the last name:

2       Bill
0       Emma
5       Jack
4       Jill
1      Maria
3    William

What if you’d like to sort the Series in a descending order?

In that case, simply set ascending=False as captured below:

import pandas as pd

ser = pd.Series(['Emma', 'Maria', 'Bill', 'William', 'Jill', 'Jack'])

ser.sort_values(ascending=False, inplace=True)

print(ser)

The Series is now sorted in a descending order, where ‘William‘ is the first name, and ‘Bill‘ is the last name:

3    William
1      Maria
4       Jill
5       Jack
0       Emma
2       Bill

Sort Pandas Series that Contains Numeric Values

Let’s now see how to sort a Series that includes numeric values.

To start, create the following Pandas Series that contains only numeric values:

import pandas as pd

ser = pd.Series([45, 99, 23, 15, 117, 72])

print(ser)

Run the code, and you’ll get an unsorted Series with the following numeric data:

0     45
1     99
2     23
3     15
4    117
5     72

You can then sort the Series in an ascending order:

import pandas as pd

ser = pd.Series([45, 99, 23, 15, 117, 72])

ser.sort_values(ascending=True, inplace=True)

print(ser)

You’ll notice that the Series is now sorted in an ascending order, where 15 is the first number while 117 is the last number:

3     15
2     23
0     45
5     72
1     99
4    117

Alternatively, you can sort the Series in a descending order:

import pandas as pd

ser = pd.Series([45, 99, 23, 15, 117, 72])

ser.sort_values(ascending=False, inplace=True)

print(ser)

Here is the result, where 117 appears first, and 15 appears last:

4    117
1     99
5     72
0     45
2     23
3     15

Sort Pandas Series that Contains NaN Values

For the final scenario, create a Series with NaN values using the Numpy library:

import pandas as pd
import numpy as np

ser = pd.Series([45, np.nan, np.nan, 99, 23, 15, 117, np.nan, 72])

print(ser)

As you may observe, the unsorted Series now includes 3 NaNs as highlighted in yellow:

0     45.0
1      NaN
2      NaN
3     99.0
4     23.0
5     15.0
6    117.0
7      NaN
8     72.0

You can then place the NaN values at the top (while the other values will be sorted in an ascending order).

To accomplish this goal, you’ll need to set na_position=’first’ as follows:

import pandas as pd
import numpy as np

ser = pd.Series([45, np.nan, np.nan, 99, 23, 15, 117, np.nan, 72])

ser.sort_values(ascending=True, na_position='first', inplace=True)

print(ser)

The NaN values will now appear at the top, while the remaining values will be sorted in an ascending order:

1      NaN
2      NaN
7      NaN
5     15.0
4     23.0
0     45.0
8     72.0
3     99.0
6    117.0

Alternatively, you can place the NaN values at the bottom (while the other values will be sorted in an ascending order):

import pandas as pd
import numpy as np

ser = pd.Series([45, np.nan, np.nan, 99, 23, 15, 117, np.nan, 72])

ser.sort_values(ascending=True, inplace=True)

print(ser)

You’ll now notice that the NaN values appear at the bottom, while the other values are sorted in an ascending order:

5     15.0
4     23.0
0     45.0
8     72.0
3     99.0
6    117.0
1      NaN
2      NaN
7      NaN

You can read more about sorting a Series by visiting the Pandas Documentation.