首页 > 解决方案 > 将python pandas数据框的行名提取为pandas系列

问题描述

是否可以将 python pandas 数据框的行名提取为 pandas 系列?谢谢!

# 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)

标签: pythonpandas

解决方案


将索引值传递给Series构造函数:

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

或者如果使用Index.to_seriess 必须通过Series.reset_indexwith drop=Truefor default创建默认索引RangeIndex,因为默认情况下索引和值是相同的:

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

另一个想法是通过长度传递index参数:np.arangeDataFrame

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

推荐阅读