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

Pandas的基本功能(三)

作者: 5f2a6061653d | 来源:发表于2018-11-29 23:33 被阅读8次

    索引、选取与过滤

    Series对象

    Series对象的索引类似与NumPy数组的索引,唯一的区别是Series对象的索引值不仅是整数,具体见本章第二节的Series对象。接下来将详细讲解 Series对象中的切片,具体示例如下所示:

    In [103]: import numpy as np
    In [104]: from pandas import Series,DataFrame
    In [105]: se1 = Series(np.arange(5),index = ['a','b','c','d','e'])
    In [106]: se2 = se1['b':'d']
    

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

    In [107]: se1
    Out[107]:
    a 0
    b 1
    c 2
    d 3
    e 4
    dtype: int32
    In [108]: se2
    Out[108]:
    b 1
    c 2
    d 3
    dtype: int32
    

    从上述运行结果可看出,Series对象的切片操组与Python中切片有所不同,Python中切片是包括切片首端,不包括切片末端,而Series对象中切片是既包括首端,也包括末端。
    切片操作除了选取部分内容以外,还可设置Series对象的值,具体示例如下所示:

    In [109]: se1['b':'d'] = 10
    

    设置完之后的Series对象运行结果如下所示:

    In [110]: se1
    Out[110]:
    a 0
    b 10
    c 10
    d 10
    e 4
    dtype: int32
    

    DataFrame对象

    DataFrame对象的基本索引内容见本章第二节的DataFrame对象,接下来将详细讲解 DataFrame对象中的切片及数据选取,具体示例如下所示:

    In [8]: from pandas import Series,DataFrame
    In [9]: dct = {'name':['qian','feng','jiao','yu'],'age':[11,20,12,16],
     ...: 'score':[90,89,99,95]}
    In [10]: f1 = DataFrame(dct,columns = ['name','age','score'])
    In [11]: f2 = f1[1:3]
    In [12]: f3 = f1[f1['score'] > 90]
    

    上述代码是对DataFrame对象切片及数据选取操作,其中In [11]是DataFrame对象的切片操作,并将切片后的结果赋值给变量f2;In [12]是DataFrame对象通过布尔类型Series进行数据选取,并将选取结果赋值给变量f3。各变量的运行结果如下所示:

    In [13]: f1
    Out[13]:
     name age score
    0 qian 11 90
    1 feng 20 89
    2 jiao 12 99
    3 yu 16 95
    In [14]: f2
    Out[14]:
     name age score
    1 feng 20 89
    2 jiao 12 99
    In [15]: f3
    Out[15]:
     name age score
    2 jiao 12 99
    3 yu 16 95
    

    从上述运行结果可看出,DataFrame对象的切片操作与Python中切片相同,切片时都是包括切片首端,不包括切片末端。
    DataFrame对象还可通过loc和iloc来进行切片或数据获取操作,其中loc是用index和columns的索引值进行操作,而iloc是不理会index和columns的索引值,永远都是用从0开始的下标进行操作,具体示例如下所示:

    In [24]: from pandas import Series,DataFrame
    In [25]: dct = {'name':['qian','feng','jiao','yu'],'age':[11,20,12,16],
     ...: 'score':[90,89,99,95]}
    In [26]: f1 = DataFrame(dct,index = ['a','b','c','d'],
     ...: columns = ['name','age','score'])
    In [27]: f2 = f1.loc[:,'name']
    In [28]: f3 = f1.iloc[1:3,:]
    In [29]: f4 = f1.loc['a':'c',:'score']
    In [30]: f5 = f1.iloc[1:3,:3]
    

    上述代码是对DataFrame对象通过loc和iloc来进行切片或数据获取操作,其中In [27]和In [29]是DataFrame对象使用loc进行操作,并将切片后的结果分别赋值给变量f2,f4;In [28]和In [30]是DataFrame对象使用iloc进行操作,并将切片后的结果分别赋值给变量f3、f5。各变量的运行结果如下所示:

    In [31]: f1
    Out[31]:
     name age score
    a qian 11 90
    b feng 20 89
    c jiao 12 99
    d yu 16 95
    In [32]: f2
    Out[32]:
    a qian
    b feng
    c jiao
    d yu
    Name: name, dtype: object
    In [33]: f3
    Out[33]:
     name age score
    b feng 20 89
    c jiao 12 99
    In [34]: f4
    Out[34]:
     name age score
    a qian 11 90
    b feng 20 89
    c jiao 12 99
    In [35]: f5
    Out[35]:
     name age score
    b feng 20 89
    c jiao 12 99
    

    从上述运行结果可看出,其中loc是用index和columns的索引值进行操作,而iloc是不管index和columns的索引值的,一直都是用从0开始的下标进行操作。

    注意:DataFrame对象还可通过ix来进行切片或数据选取操作,ix既可通过索引值获取数据,也可通过下标来获取数据,但ix优先匹配的是索引值,当索引值是数字时可能会出现差错,因此建议尽量不要使用ix,而是使用loc和索引值或iloc和下标两种方式来获取数据。

    相关文章

      网友评论

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

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