美文网首页
pandas库学习(四) reindex

pandas库学习(四) reindex

作者: 3ni | 来源:发表于2018-11-02 09:48 被阅读0次

    pandas对象的一个重要方法是reindex,其作用是创建一个适应新索引的新对象。比如如下:
    obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
    print obj

    d    4.5
    b    7.2
    a   -5.3
    c    3.6
    dtype: float64
    

    现在想重新调整索引,于是这样操作:
    obj2=obj.reindex(['a','b','c','d','e'])
    print obj2

    a   -5.3
    b    7.2
    c    3.6
    d    4.5
    e    NaN
    dtype: float64
    

    不存在的值就添加为NaN

    有时候会有很多重复的数据,但是又懒得一个个输入,所以可以进行一些插值处理,reindex中的method方法可以达到此目的,使用ffill方法实现向前值填充,比如:
    obj3 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
    obj3.reindex(range(6),method='ffill')

    0      blue
    1      blue
    2    purple
    3    purple
    4    yellow
    5    yellow
    dtype: object
    

    看结果,分别在0,2,4的前面(1,3,5)分别插入了相应的值
    method还有这些参数:
    bfill向后填充
    pad向前搬运
    backfill向后搬运,大家可以试试效果

    如果有一个DataFrame对象,我现在想更改它的索引怎么办,使用reindex方法
    比如:
    frame=DataFrame(np.arange(9).reshape((3,3)),index=['a','c','d'],columns=['Ohio','Texas','California'])

       Ohio  Texas  California
    a     0      1           2
    c     3      4           5
    d     6      7           8
    

    现在这个索引是['a','c','d'],我想改成['a','b','c','d']怎么办,执行以下操作就可以:
    frame2=frame.reindex(['a','b','c','d'])

       Ohio  Texas  California
    a   0.0    1.0         2.0
    b   NaN    NaN         NaN
    c   3.0    4.0         5.0
    d   6.0    7.0         8.0
    

    结果b这一行为NaN,因为我们没有给它任何值,所以全部是NaN
    同样,使用 columns 关键字可以使列重新索引:
    states = ['Texas', 'Utah', 'California']
    frame.reindex(columns=states)

       Texas  Utah  California
    a      1   NaN           2
    c      4   NaN           5
    d      7   NaN           8
    

    同样Utah这一列我们没有给任何数据,所以也为NaN

    对于DataFrame,我们同样可以像Series一样进行插值查找,比如:

       Ohio  Texas  California
    a     0      1           2
    c     3      4           5
    d     6      7           8
    

    frame.reindex(['a','b','c','d'],method='ffill')

       Ohio  Texas  California
    a     0      1           2
    b     0      1           2
    c     3      4           5
    d     6      7           8
    

    需要注意的是,插值只在行侧(0坐标轴)进行,即这样操作是没有用的:
    frame.reindex(columns=['Texas', 'Ohio', 'California','wzh'],method='ffill')

    以下两种操作是等价的:
    frame.ix[['a', 'b', 'c', 'd'], ['Texas', 'Ohio', 'California']]
    frame.reindex(index=['a', 'b', 'c', 'd'],columns=['Texas', 'Ohio', 'California'])

    下面是reindex具体的参数:


    image.jpeg

    相关文章

      网友评论

          本文标题:pandas库学习(四) reindex

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