【基本工具】S02E07 Series对象的数据选取方法

0.本集概览

1.类比字典,按照键-值的方法来进行取值
2.类比数组,采用分片、条件掩码和花哨索引来取值
3.采用索引器使得数值型索引的取值更清晰

前两集里,我们概述了Pandas的基本数据对象,从这一集开始,我们结合这几种数据对象,按照专题,一步一步的综合推进。

首先介绍Pandas中数据的选取方法,今天先介绍Series对象的数据选取方式。

在之前的剧集中我们谈到过,Series和NumPy数组、Python字典在许多方面都有可比之处,那么我们就从这两个维度来类比Series数据对象的索引和获取。

1.类比字典,按键值方式获取数据

从字典的角度来理解,可以用类似键-值的角度来获取数据:

因为Series本质上可以看做是index序列到值序列的一一映射,因此index本质上可以看做是数据对象的一组键,那么之前字典里的一些常用用法,就可以用在Series对象里了:
代码片段:

import pandas as pd

data = pd.Series([0.25,0.5,0.75,1.0]
                 ,index=['a','b','c','d'])
print(data['c'])             #通过键来获取字典的值
print('a' in data)           #判断键是否存在
print(data.keys())           #获取键的列表
print(list(data.items()))    #获取键值对的列表

运行结果:

0.75
True
Index(['a', 'b', 'c', 'd'], dtype='object')
[('a', 0.25), ('b', 0.5), ('c', 0.75), ('d', 1.0)]

是不是感觉非常的熟悉?运用和字典类型进行类比的方法,就非常好接受了。

再补充一点,Series对象还可以利用字典语法进行数据调整,字典里可以通过新增键来扩展字典的数据项,Series同样可以利用新增索引来扩展Series的数据项:
代码片段:

import pandas as pd

data = pd.Series([0.25,0.5,0.75,1.0]
                 ,index=['a','b','c','d'])
data['e'] = 1.25
print(data)

运行结果:

a    0.25
b    0.50
c    0.75
d    1.00
e    1.25
dtype: float64

2.类比NumPy,采用分片、掩码、花哨索引

Series还可以看做是一维数组对象,那么我们再次类比一下NumPy数据类型,类比采用NumPy中的分片索引、掩码以及花哨索引方法。

我们先看看分片索引,Series中的分片索引有两种形式:显式和隐式。
代码片段:

import pandas as pd

data = pd.Series([0.25,0.5,0.75,1.0]
                 ,index=['a','b','c','d'])

print(data['a':'c'])
print(data[0:2])

运行结果:

a    0.25
b    0.50
c    0.75
dtype: float64

a    0.25
b    0.50
dtype: float64

第一种['a':'c'],利用实际的索引值进行的分片,是显式索引值分片,他所得到的结果是包括最后一个值的,而第二种[0:2]则是利用整数索引进行分片,是隐式索引分片,这就如同普通数组分片操作一样。

最后再来看看其他几种特殊一点的取值方式:

掩码索引。例如我们取出Series对象中介于0.2到0.6之间的数据:
代码片段:

import pandas as pd

data = pd.Series([0.25,0.5,0.75,1.0]
                 ,index=['a','b','c','d'])
print(data[(data > 0.2) & (data < 0.6)])

运行结果:

a    0.25
b    0.50
dtype: float64

还有一种所谓的花哨索引,这里我们也提一下:
代码片段:
```
import pandas as pd

data = pd.Series([0.25,0.5,0.75,1.0]
,index=['a','b','c','d'])

top Created with Sketch.