索引、选取与过滤
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和下标两种方式来获取数据。
网友评论