美文网首页Pandas
Pandas的基本功能(一)

Pandas的基本功能(一)

作者: 5f2a6061653d | 来源:发表于2018-11-14 16:27 被阅读1次

    重新索引

    Pandas对象含有一个重要的函数——reindex()函数,其作用是创建一个适应新索引的新对象。reindex()函数可对Series和DataFrame对象进行重新索引,接下来详细讲解。

    对Series对象重新索引

    具体示例如下所示:

    In [26]: from pandas import Series,DataFrame
    In [27]: se1 = Series([2.4,4.0,3.5,-6.2],index = ['b','a','c','d'])
    In [28]: se2 = se1.reindex(['a','b','c','d','e','f'])
    

    上述代码是对Series对象重新索引,其中In [27]是创建Series对象,并将其赋值给变量se1;In [28]是对se1对象重新索引,并将重新索引后的结果赋值给变量se2。各变量的运行结果如下所示:

    In [29]: se1
    Out[29]:
    b 2.4
    a 4.0
    c 3.5
    d -6.2
    dtype: float64
    In [30]: se2
    Out[30]:
    a 4.0
    b 2.4
    c 3.5
    d -6.2
    e NaN
    f NaN
    dtype: float64
    

    从上述运行结果可看出,se2对象是se1对象重新索引的结果,并且新索引值“e”、“f”对应的值是缺失值NaN,即调用Series的reindex()函数将会根据新设置的索引值进行重排,若某个索引值当前不存在时,则会引入缺失值来填充。
    在重新设置索引时,可能会存在缺失值的情况,reindex()函数中的method属性可在重新索引时选择插入值的处理方式,具体示例如下所示:

    In [34]: from pandas import Series,DataFrame
    In [35]: se1 = Series(['北京','上海','深圳'],index = [0,2,4])
    In [36]: se2 = se1.reindex(range(6),method = 'ffill')
    

    上述代码是对Series对象重新索引时选择插入值,其中In [36]是对se1对象重新索引,并指定缺失值前向填充,并将处理后的结果赋值给变量se2。各变量的运行结果如下所示:

    In [37]: se1
    Out[37]:
    0 北京
    2 上海
    4 深圳
    dtype: object
    In [38]: se2
    Out[38]:
    0 北京
    1 北京
    2 上海
    3 上海
    4 深圳
    5 深圳
    dtype: object
    

    从上述运行结果可看出,se2对象是se1对象重新索引的结果,并且新索引值“1”、“3”、“5”实现前向填充,即指定method属性值为“ffill”,使新索引所对应值填充上一元素的值。可用的method选项除了“ffill”,还有后向填充“bfill”,具体如表4.4所示。

    选项值 说明
    ffill或pad 前向填充(或搬运)值
    bfill或backfill 后向填充(或搬运)值

    对DataFrame对象重新索引

    对于DataFrame对象,reindex()函数既可以修改行索引,也可以修改列索引,而且可同时修改行列索引。具体示例如下所示:

    In [39]: from pandas import Series,DataFrame
    In [40]: import numpy as np
    In [41]: ndarr = np.arange(9).reshape(3,3)
    In [42]: ind = ['a','c','d']
    In [43]: col = ['one','two','three']
    In [44]: f1 = DataFrame(ndarr,index = ind,columns = col)
    In [45]: f2 = f1.reindex(['a','b','c','d'])
    In [46]: f3 = f1.reindex(index = ['a','b','c','d'],
     ...: columns = ['one','two','three','four'])
    

    上述代码是对DataFrame对象重新索引,其中In [41]是创建一个3×3的数组,并将其赋值给变量ndarr;In [42]是创建一个列表作为DataFrame对象的行索引值,并将其赋值给变量ind;In [43]是创建一个列表作为DataFrame对象的列索引值,并将其赋值给变量col;In [44]是创建DataFrame对象,并将其赋值给变量f1;In [45]是对f1对象的行重新索引,并将重新索引之后的结果赋值给变量f2;In [46]是对f1对象的行和列均重新索引,并将重新索引之后的结果赋值给变量f3。各变量的运行结果如下所示:

    In [47]: f1
    Out[47]:
     one two three
    a 0 1 2
    c 3 4 5
    d 6 7 8
    In [48]: f2
    Out[48]:
     one two three
    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
    In [49]: f3
    Out[49]:
     one two three four
    a 0.0 1.0 2.0 NaN
    b NaN NaN NaN NaN
    c 3.0 4.0 5.0 NaN
    d 6.0 7.0 8.0 NaN
    

    从上述运行结果可看出,当存在新索引时,会以缺失值填充。当然,可以指定fill_value参数来替代缺失值,具体示例如下所示:

    In [50]: f3 = f1.reindex(index = ['a','b','c','d'],
     ...: columns = ['one','two','three','four'],fill_value = 10)
    

    上述代码是对f1对象的行和列均重新索引,并将所有的缺失值替换为10,最后将重新索引之后的结果赋值给变量f3,修改之后的f3运行结果如下所示:

    In [51]: f3
    Out[51]:
     one two three four
    a 0 1 2 10
    b 10 10 10 10
    c 3 4 5 10
    d 6 7 8 10
    

    从上述运行结果可看出,之前f3对象中的缺失值都被替换成了10。

    reindex函数还有很多其他的参数,每个参数都有特殊的功用,具体如表4.5所示。

    参数 说明
    index 用作索引的新序列,既可是Index实例,也可是其他序列的Python数据结构,Index会被完全使用,如未复制一般
    method 填充方式,具体参数参见表4.4
    fill_value 在重新索引的过程中,需要引入缺失值时使用的替代值
    limit 前向或或后向填充时的最大填充量
    level 在MultiIndex的指定级别上匹配简单索引,否则选择其子集
    copy 默认为True,无论如何都复制;若为False,则新旧相等就不复制

    相关文章

      网友评论

        本文标题:Pandas的基本功能(一)

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