序列(Series
)是一维的,由一组有序的数据以及与之相关的索引组成,可以保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维数组。轴标签和下标统称为索引,能够经过索引来访问Series对象中的元素。html
序列的构造函数定义是:数组
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False)
构造函数的参数:函数
索引的下标是自动生成的,从0开始,加1递增。对于序列的data,能够经过序列的属性values来访问;对于序列的索引,能够经过序列的属性index来访问。spa
1,建立空的序列code
s=pd.Series()
2,使用ndarray建立序列htm
建立ndarray的一维数组,构造序列,序列包含两部分:索引和序列值,以下所示对象
>>> data=np.array(['a','b']) >>> pd.Series(data) 0 a 1 b dtype: object
最左侧的0和1是行索引,a和b是值,在构造序列时,没有传递任何索引,默认状况下,pandas分配了从 0 到 len(data)-1 的索引,也能够在构造函数中传递自定义的索引列表,以下所示:blog
>>> pd.Series(data,index=[101,102]) 101 a 102 b dtype: object
3,从列表构造序列索引
使用列表做为data 参数来构造序列,对于索引,可使用默认值,也能够自定义索引标签:文档
s=pd.Series([4,7,-5,3])
s=pd.Series([4,7,-5,3],index=['d','b','a','c'])
4,从字典构造序列
能够直接经过字典来建立Series,其中,字典的key做为序列的索引,字典的value做为序列值:
>>> sdata = {'b': 12, 'a': 13, 'd': 14, 'c': 10} >>> sd=pd.Series(sdata) b 12 a 13 d 14 c 10 dtype: int64
5,设置多级别的索引
index参数能够设置为多个索引,每一个索引的长度都是相同的。
>>> arrays = [np.array(['qux', 'qux', 'foo', 'foo', ... 'baz', 'baz', 'bar', 'bar']), ... np.array(['two', 'one', 'two', 'one', ... 'two', 'one', 'two', 'one'])] ... >>> s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8], index=arrays) >>> s qux two 1 one 2 foo two 3 one 4 baz two 5 one 6 bar two 7 one 8 dtype: int64
序列元素的访问,能够经过索引,下标,索引是在构造函数中经过index参数传递或构造的,而下标是默认生成的,第一个元素的下标值是0,依次加1递增。
1,经过下标来访问序列
下表从0开始,依次加1递增,访问序列的第一个元素:
>>> sd[0]
12
访问序列的前三个元素,下表为负,表示从方向来访问:
sd[:3]
sd[-3:]
2,经过索引标签来访问序列的元素
经过索引来访问序列的元素,并能够修改序列元素的值
sd['a']=4
也能够传递多个索引标签:
>>> sd[['a','b']] a 13 b 12
序列对象包含的属性:
序列对象还能经过属性来访问序列的元素值。
1,at和iat属性,用于访问单个序列元素值
at属性表示的是索引标签和元素值对,经过索引标签访问单个序列值
>>> sd.at['a'] 13
iat属性表示的下表和元素值对,经过下表访问序列的单个元素值:
>>> sd.iat[1]
13
2,loc和iloc,经过序列的位置来访问元素
iloc:纯粹基于整数位置的索引,用于按位置选择序列元素
loc:经过索引标签和布尔值数组来选择序列的元素
举个例子,经过整数序列来选择序列的元素:
>>> sd.iloc[0:2] b 12 a 13
举个例子,经过索引的标签来选择序列的元素:
>>> sd.loc[['a','b']] a 13 b 12 dtype: int64
3,ix属性
ix属性是最首要的标签-位置的索引器,具备整数位置的回退,注意,不推荐使用ix索引器。
举个例子,ix索引器既支持整数,也支持标签的访问。
>>> sd.ix[1] >>> sd.ix['a']
4,get()和key函数
get(key):key参数能够是索引的下标,也能够是索引的标签,根据key返回相应的value
keys():该函数返回序列的全部索引标签
>>> sd.keys() Index(['b', 'a', 'd', 'c'], dtype='object') >>> sd.get('a') 13 >>> sd.get(0) 12
5,得到懒惰迭代器
能够经过序列的__iter__()函数得到值的迭代器,也能够经过items()或iteritems()函数得到包含索引和值的元组的迭代器:
Series.__iter__(self) #Return an iterator of the values. Series.items(self) #Lazily iterate over (index, value) tuples. Series.iteritems(self) #Lazily iterate over (index, value) tuples.
例如,经过items()函数得到序列的迭代器,并经过for循环来打印序列的值
>>> for t in sd.items(): ... print(t) ... ('b', 12) ('a', 13) ('d', 14) ('c', 10)
按照条件选择序列的特定行,可使用序列的loc或iloc属性,并使用布尔索引来筛选序列的数据行:
>>> sd.loc[sd>12] a 13 d 14 dtype: int64
也可使用逻辑表达式对条件进行组合计算:
>>> sd.loc[(sd>12) & (sd<14)] a 13 dtype: int64 >>> sd.loc[(sd>12) | (sd<14)] b 12 a 13 d 14 c 10 dtype: int64
注意,必须用小括号把两个逻辑表达式括起来,否则会报错:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
查看序列的逻辑表达式的值:
>>> (sd>12) & (sd<14)
b False
a True
d False
c False
dtype: bool
参考文档: