一、The Series Data Structure:
Series是pandas的核心数据结构之一,在pandas中,Series是一个一维的类似的数组对象,可以看成一个介于list和dictionary之间的结构,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引。为了方便理解,你可以把Series看着是一个有序字典。其中索引是连续的,从0开始。
在底层,pandas使用Numpy库将Series中的值存储到一个类型数组中(a typed array),这样的话,使得处理series比处理传统的python的list要快很多。
1.创建Series:
以list创建Series:
如果只给出了list而不给出相应的index的话,pandas会对值自动分配从0开始的自增的index。而且在没有指定Series的name属性的情况下,pandas会根据处理内容添加上相应的name,比如下面的两个例子中,第一个的name就是object,第二个是int64。
import pandas as pd
animals = ['Tiger', 'Bear', 'Moose']
pd.Series(animals)
numbers = [1, 2, 3]
pd.Series(numbers)
在python中以None表示缺失的数据,而在pandas中会根据所处理的对象类型的不同分为None和NaN,None代表某个对象,字符串等的缺失;NaN代表的是数值上的缺失,它和None很相似,但是NaN是数值类型的(numeric value)。这样分开处理的原因是,NaN的处理效率更高。
animals = ['Tiger', 'Bear', None]
pd.Series(animals)
numbers = [1, 2, None]
pd.Series(numbers)
对于None和NaN来说,要注意下面几点:
sports = {'Archery': 'Bhutan',
'Golf': 'Scotland',
'Sumo': 'Japan',
'Taekwondo': 'South Korea'}
s = pd.Series(sports)
s
使用dictionary创建series时,我们可以为series通过index参数指定series的index,具体来说就是,不管dictionary中的key值,以index参数列表中的值为准,即以后出现在series里的index一定是从index参数列表中来的,与dictionary中的key值无关。对于同时存在于index参数列表和dictionary的key的index值来说,series中会有相应的数据及标签;对于只在index参数列表中存在的index值来说,series中只有index值,相应的值被设置为None或者NaN;对于只在dictionary的key值中存在的index来说,series中不会出现。
指定index和value:
s = pd.Series(['Tiger', 'Bear', 'Moose'], index=['India', 'America', 'Canada'])
s
指定的index和dictionary的key不匹配:
sports = {'Archery': 'Bhutan',
'Golf': 'Scotland',
'Sumo': 'Japan',
'Taekwondo': 'South Korea'}
s = pd.Series(sports, index=['Golf', 'Sumo', 'Hockey'])
s
2.获得Series中的值:
在Series中,数据(value)可以通过位置(index position)和标签(index label)进行查询。在没有为series设置index的情况下,位置和标签其实是一回事,都是从0开始自增的整数。
如果是采用位置进行查询的话,使用iloc属性ÿ