Extracting the row names of a python pandas dataframe as a pandas series

Viewed 423

Is it possible to extract the row names of a python pandas dataframe as a pandas series? Thanks!

# packages
import numpy as np   
import pandas as pd
import statsmodels.api as sm

# the mt cars dataset 
mtcars = sm.datasets.get_rdataset("mtcars", "datasets", cache=True).data
df = pd.DataFrame(mtcars)
df = df[1:5]

# DESIRED OUTCOCME - SOMETHING THAT LOOKS LIKE 'desired_series'  
row_names = np.array(['Mazda RX4 Wag','Datsun 710','Hornet 4 Drive','Hornet Sportabout'])
desired_series = pd.Series(row_names)
print(desired_series)

0        Mazda RX4 Wag
1           Datsun 710
2       Hornet 4 Drive
3    Hornet Sportabout
dtype: object)
2 Answers

Pass index values to Series constructor:

s = pd.Series(df.index)
print (s)
0        Mazda RX4 Wag
1           Datsun 710
2       Hornet 4 Drive
3    Hornet Sportabout
dtype: object

Or if use Index.to_series s necessary create default index by Series.reset_index with drop=True for default RangeIndex, because index and values are same by default:

print (df.index.to_series())
Mazda RX4 Wag            Mazda RX4 Wag
Datsun 710                  Datsun 710
Hornet 4 Drive          Hornet 4 Drive
Hornet Sportabout    Hornet Sportabout
dtype: object

s = df.index.to_series().reset_index(drop=True)
0        Mazda RX4 Wag
1           Datsun 710
2       Hornet 4 Drive
3    Hornet Sportabout
dtype: object

Another idea is pass index parameter with np.arange by length of DataFrame:

s = df.index.to_series(index=np.arange(len(df)))
print (s)
0        Mazda RX4 Wag
1           Datsun 710
2       Hornet 4 Drive
3    Hornet Sportabout
dtype: object

You can use directly:

desired_series = df.index.to_series()
Related