美文网首页
5.索引、标签的调整

5.索引、标签的调整

作者: soyouwantme | 来源:发表于2018-08-26 15:30 被阅读0次

    调整索引和修改标签


    可以直接修改索引:

    df.index = ['a', 'b', 'c']
    

    以下讲的方法除非是指定inplace=True,否则都是生成一个新的Pandas对象。

    调整索引

    只是调整了索引顺序,并没有修改索引与值的对应关系。
    reindex():重新索引并得到一个新的Pandas对象。
    set_index():使用某一列作为索引。

    df.reindex(['b', 'c', 'e'])
    df.set_index('two')
    

    随着索引的变化,索引相对应的行元素的值的顺序也跟着发生了改变。如果某个索引值当前不存在,就引入缺失值。

    如果要对列进行重新索引,设置columns即可,如下所示:

    df.reindex(columns=['two', 'three', 'four'])
    

    修改标签

    使用rename()方法结合dict、Series或者一个函数将原标签映射为一个新标签。

    例:将索引标签转换为大写,将表头转换成大写:

    df.rename({'a':'A', 'b':'B', 'c':'C'})
    #将索引标签转换为大写
    df.rename(columns=str.upper)
    #将表头转换成大写
    

    层次化索引


    层次化索引使得我们可以基于Pandas的基本数据结构Series(一维)和DataFrame(二维)创建更高维的数据。

    一个拥有多级别索引的Series的结构:

    data = pd.Series(np.random.randn(5), 
                     index=[['a', 'a', 'b', 'b', 'b'],
                            ['a1', 'a2', 'b1', 'b2', 'b3']])
    

    不仅在index轴上可以有多个级别,在columns轴也可以有多个级别。

    创建层次化索引

    三种方式:

    • pd.MultiIndex.from_arrays,从数组或者列表创建
    • pd.MultiIndex.from_tuples,从多个元组组成的列表创建
    • pd.MultiIndex.from_product,从多个列表交叉组合创建
    arrays = np.array([['a', 'a', 'a', 'b', 'b', 'b'], ['x', 'y', 'z', 'x', 'y', 'z']])
    tuples = [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z')]
    iterable = [['a', 'b'], ['x', 'y', 'z']]
    
    pd.MultiIndex.from_arrays(arrays)
    pd.MultiIndex.from_tuples(tuples)
    pd.MultiIndex.from_product(iterable)
    

    每个Index对象(无论是index轴上还是columns轴上的)都可有一个属性——名称names,我们可以将其当成索引列的列名,通过.index.names可以对其进行创建和修改:

    data.index.names = ['first', 'second']
    

    重排级别顺序

    要将columns轴上的索引级别互换顺序,则可以用swaplevel方法,该方法接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不发生变换)。

    如下代码所示,其中的0表示第一级别,就是最上层的['Male', 'Female']一级,而1表示第二级别,代表处于第一级别下方的['Young', 'Old']:

    df.swaplevel(0, 1, axis=1)
    

    提取部分数据:
    使用.loc.iloc方法,不过需要先通过.loc(axis)指定对行索引还是对列索引。
    例:提取第二级别索引为'x'的数据。

    df.loc(axis=0)[:, 'x']
    

    使用xs()方法,随任意级别的index和columns数据进行提取:

    df.xs('x', level=1, axis=0)
    df.xs('Old', level=1, axis=1)
    #
    

    unstack, stack

    unstack方法:将指定级别(level参数)安排在columns轴上,形成一个新的DataFrame。

    df.unstack(level=0)
    

    stack是unstack操作的逆运算,以下操作即把columns的第二级别转换到index的最内级别中:

    df.stack(level=1)
    

    将索引转换为一列数据

    使用reset_index方法重置层级索引。

    参数

    • level:提取的Index级别
    • col_level:放入的Columns级别
    df.reset_index(level=1, col_level=1)
    

    相关文章

      网友评论

          本文标题:5.索引、标签的调整

          本文链接:https://www.haomeiwen.com/subject/xueoiftx.html