本文介绍对索引进行 重新排序reindex() 以及 更换索引set_index() 时的用法,需要注意的是索引对象是无法进行修改的。
重新索引 .reindex()
重新索引不是给索引重新命名,而是对索引重新排序,如果某个索引值不存在则引入缺失值。
reindex函数参数
类型 | 使用说明 |
---|---|
index | 用于索引的新序列 |
method | 填充缺失值方法,ffill / bfill |
fill_value | 缺失值替代值 |
limit | 最大填充 |
例子:
df=pd.DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['name','id','sex'])
df
>>>
>name id sex
a 0 1 2
c 3 4 5
d 6 7 8
df2=df.reindex(['a','b','c','d'],method='ffill')
df2
>>>
> name id sex
a 0 1 2
b 0 1 2
c 3 4 5
d 6 7 8
更换索引 .set_index()
在DataFrame数据中,如果不希望使用默认行索引,可以在创建数据时通过index参数来设置行索引。
如果需要将某列数据作为行索引,这时需要用到 set_index()方法,与该方法相反的方法是 reset_index()。
函数参数:
set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
keys:是要设置为索引的列表。
drop:默认为true,表示是否将作为新索引的列删除。如果为false,则保留原来的列,true则删除原列。
append:是否保留原来的索引,默认false不保留,为true则保留原索引。
inplace:是否创建一个新的dataframe,默认false则创建新的dataframe,为true时修改原dataframe。
例子:
#更换索引(区别与更新索引)
data={'name':['张三','李四','王五','小明'],
'sex':['female','female','male','male'],
'year':['2001','2001','2003','2002'],
'city':['北京','上海','广州','北京']}
dataDf=pd.DataFrame(data)
dataDf
>>>
> name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
dataDf.set_index(['name'],inplace=True)
dataDf
>>>
> sex year city
name
张三 female 2001 北京
李四 female 2001 上海
王五 male 2003 广州
小明 male 2002 北京
dataDf.reset_index(inplace=True)
dataDf
>>>
>name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 广州
3 小明 male 2002 北京
数据排序后,原数据的索引可以通过drop参数删除。
#排序时,索引变化
dataDf2=dataDf.sort_values('year')
dataDf2
>>>
>name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
3 小明 male 2002 北京
2 王五 male 2003 广州
dataDf3=dataDf2.reset_index(drop=True)
dataDf3
>>>
> name sex year city
0 张三 female 2001 北京
1 李四 female 2001 上海
2 小明 male 2002 北京
3 王五 male 2003 广州