pandas dataframe reindex 重置行和列索引解决方法

  • Post author:
  • Post category:其他


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.

有时间再详细补充



版权声明:本文为weixin_44781801原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。