zoukankan      html  css  js  c++  java
  • 3-Pandas数据初探索之索引调整方法

    一、调整索引、修改列标签

    1、调整索引的两种情况:

    • 重新索引
    • 设置新的索引

    (1)重新索引

      在Pandas对象中,其实索引也是一个对象,所以可对其进行修改。

        例如:df.index=['a','b','c']

    >>> df = {'one':pd.Series(np.random.randn(3)),'two':pd.Series(np.random.randn(3)),
    'three':pd.Series(np.random.rand(3))}
    >>> df = pd.DataFrame(df)
    >>> df
            one       two     three
    0 -0.996986  0.190981  0.482912
    1 -0.233812 -0.140953  0.052706
    2  0.470900  0.590664  0.486823
    
    #设置索引
    >>> df.index=['a','b','c']
    >>> df
            one       two     three
    a -0.996986  0.190981  0.482912
    b -0.233812 -0.140953  0.052706
    c  0.470900  0.590664  0.486823

    (2)设置新的索引

      reindex():重新索引并得到一个新的Pandas对象。

      且reindex()方法不仅可以重新索引DataFrame,也可以同时实现过滤功能。

    >>> new = df.reindex(['b','c','e'])
    >>> new
            one       two     three
    b -0.233812 -0.140953  0.052706
    c  0.470900  0.590664  0.486823
    e       NaN       NaN       NaN
    

      reindex()也可以用来调整列的顺序,这时需要设定axis参数为'columns'或1

    >>> df.reindex(['three','two','one'],axis='columns')
          three       two       one
    a  0.766450  0.452801  1.286715
    b  0.342262  1.523188  0.620788
    c  0.867786  0.758714 -2.343242

    (3)使用set_index()可以指定某一列为索引,这在对日期型数据或者是以名称进行区分的数据非常有用,后期会以实例描述的更为详细。

    >>> df.set_index('one')
                    two     three
    one
    -0.996986  0.190981  0.482912
    -0.233812 -0.140953  0.052706
     0.470900  0.590664  0.486823

      上述的方法在将某一列设置为索引后,特征不会将该列进行保存,若需要将设置为索引的列保留在数据中,则需要将参数drop设置为False

      >>> df.set_index('one',drop=False)

                    one       two     three
    one
     1.286715  1.286715  0.452801  0.766450
     0.620788  0.620788  1.523188  0.342262
    -2.343242 -2.343242  0.758714  0.867786

       若是希望在原来索引的基础之上添加新的变量构成层次化索引,则设置append参数为True  

      >>>df.set_index('one',append=True)

    >>> df
            one       two     three
    a  1.286715  0.452801  0.766450
    b  0.620788  1.523188  0.342262
    c -2.343242  0.758714  0.867786
    >>> df.set_index('one',append=True)
                      two     three
      one
    a  1.286715  0.452801  0.766450
    b  0.620788  1.523188  0.342262
    c -2.343242  0.758714  0.867786
    

    2、修改标签

      修改索引和列名的标签可以使用rename()方法结合字典、Series或者一个原函数将标签映射为一个新的标签

      (1)关于结合字典可以参照3-Pandas之Series和DataFrame区别的第六部分

      (2)使用函数映射的方式

      例:将字符串的大写转换函数传入,对列标签进行修改

    >>> df.rename(columns=str.upper)
            ONE       TWO     THREE
    a -0.996986  0.190981  0.482912
    b -0.233812 -0.140953  0.052706
    c  0.470900  0.590664  0.486823
    

      例:结合lambda:将所有的列的前2个字符大写,其余小写

    >>> df.rename(columns=lambda x:x[:2].upper()+x[2:].lower())
            ONe       TWo     THree
    a -0.996986  0.190981  0.482912
    b -0.233812 -0.140953  0.052706
    c  0.470900  0.590664  0.486823

    二、创建层次化索引

      层次化索引可以基于Series和DataFrame创建更加高维的数据

      也就是说,若有一个DataFrame是一个堆积式的(在一个轴上需要创建不止一个索引),那么此时就需要用到层次化索引,这和Panel有些类似。但是在实际中并不是很常用!

    创建一个层次化索引:

    >>> data=pd.Series(np.random.randn(5),index=[['a','a','b','b','b'],['a1','a2','b1','b2','b3']])
    >>> data
    a  a1    0.792324
       a2   -0.650764
    b  b1   -0.282874
       b2   -1.402477
       b3   -3.551578
    dtype: float64
    
    #查看索引
    >>> data.index
    MultiIndex(levels=[['a', 'b'], ['a1', 'a2', 'b1', 'b2', 'b3']],
               codes=[[0, 0, 1, 1, 1], [0, 1, 2, 3, 4]])
    #levels包含了每个级别索引的标签,labels是对每个数据在对应不同levels的位置进行了标记

    每个index均有一个属性(名称names),可通过.index.names对索引列的列名进行创建于修改

    >>> data.index.names=['first','second']
    >>> data
    first  second
    a      a1        0.792324
           a2       -0.650764
    b      b1       -0.282874
           b2       -1.402477
           b3       -3.551578
    dtype: float64

    三、重排级别顺序

     重排级别顺序是基于有索引个数>=1的DataFrame。

    (1)swaplevel():将columns轴上的索引级别进行互换。

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

    (2)reorder_levels():指定多个级别的顺序

    (3)提取数据还是可以使用iloc()与loc()

    (4)unstack():若index轴上有多个级别索引的DataFrame,使用该方法将指定级别(level参数)安排在columns上形成一个新的DataFrame

  • 相关阅读:
    排序——选择排序和插入排序
    排序——排序的基本概念
    字符串类——KMP算法的应用
    字符串类——KMP子串查找算法
    字符串类——字符串类的创建(下)
    字符串类——字符串类的创建(上)
    数据结构库——链式队列的实现
    P4180 【模板】严格次小生成树[BJWC2010]
    P2511 [HAOI2008]木棍分割
    P2613 【模板】有理数取余
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13387111.html
Copyright © 2011-2022 走看看