df 数据是 pd.dataframe 类型,原格式是
>>>df.reindex(['a','b','c','d','e'])
C1 C2
b 200 NaN
c 200 NaN
a 404 NaN
e 404 NaN
d 301 NaN
希望重置 df 索引为指定顺序:a,b,c,d,e
利用 pandas 内置 reindex 重置函数
df.reindex([‘a’,‘b’,‘c’,‘d’,‘e’])
运行上述代码后索引顺序并没有改变,仍为原来的b,c,a,e,d
在百度上搜索了很久都没有找到解决方法,只有一些区分 reindex 和 reset.index 的函数解释,我查看了 pandas 源代码,发现 reindex 函数还有一个 axis 变量,可以指定对行或列的索引进行重新排序。
df.reindex([‘a’,‘b’,‘c’,‘d’,‘e’], axis = ‘rows’)
运行上述代码后,终于成功重置了索引顺序,新格式为
>>> df.reindex(['a','b','c','d','e'], axis = 'rows')
C1 C2
a 404 NaN
b 200 NaN
c 200 NaN
d 301 NaN
e 404 NaN
索引对应的值不会改变,只改变了索引排列的顺序
**
补充说明
:因为reindex函数没有(inplace=True)参数,如果没有成功重置索引,建议新增参数,如 df_1 = df.reindex([‘a’,‘b’,‘c’,‘d’,‘e’], axis = ‘rows’)
拓展一下:
**
df.reindex( xxxx, axis = ‘rows’) 重置索引行顺序
df.reindex( xxxx, axis = ‘columns’)
如果新索引名与原来相同,则重置索引列顺序
如果新索引名与原来不同,将替代原索引名称并创建新列,如下:
>>> df.reindex(['D1','D2','D3'], axis = 'columns')
D1 D2 D3
a 404 NaN NaN
b 200 NaN NaN
c 200 NaN NaN
d 301 NaN NaN
e 404 NaN NaN
df.reindex([‘http_status’, ‘user_agent’], axis=“columns”)
df.reindex(index=index_labels, columns=column_labels, …) 筛选行和列
reindex 还可以用来处理空值 NaN,df.reindex([‘a’,‘b’,‘c’,‘d’,‘e’], fill_value=‘FL’)
>>> df.reindex(['a','b','c','d','e'], fill_value='FL')
D1 D2 D3
a 404 FL FL
b 200 FL FL
c 200 FL FL
d 301 FL FL
e 404 FL FL
其他相似函数功能
DataFrame.set_index : Set row labels.
DataFrame.reset_index : Remove row labels or move them to new columns.
DataFrame.reindex_like : Change to same indices as other DataFrame.
有时间再详细补充