以前在Numpy写过索引和切片可以参考Numpy的操作
首先导入我们的Numpy与Pandas import pandas as pd import numpy as np
a = np.array([2345,6789,1234,5678]) b = pd.Series(a,index=['python','java','html','c']) print(b['java']) print('java' in b) print('hadoop' in b) print(b.keys()) 6789 True False Index(['python', 'java', 'html', 'c'], dtype='object')不难看出来在[ ]里面放置的是标签索引的一个值,类似于数组中用整数作为下标。比如b[‘java’],就是以某一个标签索引下标获得其对应的数据。索引与数据之间这种映射类似于python中的字典对象key与value之间的关系,所以也可以使用一些字典的方法。 附加:
b['hadoop'] = 9874 #增加一个 print(b) c = b['java':'hadoop'] #获取到数据的下标,前包括,后也包括 print(c) python 2345 java 6789 html 1234 c 5678 hadoop 9874 dtype: int64 java 6789 html 1234 c 5678 hadoop 9874 dtype: int64注意这里,你会发现,他并没有遵守Python序列的“前包括,后不包括”的规则,它是包括了结束标签索引的值。还有一个区别,就是它每次切出来的部分生成了一个新的对象,没有那种Numpy中所谓的“共用视图”,可以观察一下代码。
c['spark'] = 5432 print(c) print(b) java 6789 html 1234 c 5678 hadoop 9874 spark 5432 dtype: int64 python 2345 java 6789 html 1234 c 5678 hadoop 9874 dtype: int64重点又来了如下代码,还是跟着上面代码后面写
print(b[2]) print(b[1:4]) 1234 java 6789 html 1234 c 5678 dtype: int64你会突然发现,根据下标的位置索引又按照"前包括,后不包括"的方式了,这个时候我们可以写个测试的方法如下。
d = pd.Series(np.random.rand(4),index=[1,3,5,7]) print(d) print(d[1]) print(d[1:3]) 1 0.373752 3 0.227697 5 0.825495 7 0.152058 dtype: float64 0.3737523265812278 3 0.227697 5 0.825495 dtype: float64可以看出来,上面的d[1]中这个1按我们之前写的应该是位置索引啊,怎么看起来是标签索引,那再看看d[1:3],怎么里面的1又变成了位置索引了,这个时候是不是觉得很乱,于是针对索引有个专门的方法。跟着上面继续写。
print(d) print(d.iloc[1]) print(d.iloc[1:3]) 1 0.446437 3 0.341855 5 0.298457 7 0.448216 dtype: float64 0.34185531311777173 3 0.341855 5 0.298457 dtype: float64这个series.iloc[ ]方法里面只接收位置索引,如果想通过位置索引获得某个数据,这个方法还是很好用的,当然肯定也有我们的标签索引如下。这些方法不仅适用于Series对象还适用于DataFrame对象。
print(d.loc[1:3]) 1 0.564683 3 0.727926 dtype: float64注意:Series对象是一维的,只有一个方向的索引,而DataFrame则有两个维度,于是print(c[‘gdp’])方法就是用来读取列的,如果修改[ ]里面的值为字段名称或者列的索引名称,没有明确的指定就会报错。