pandas 学习 第2篇:序列 - Series

序列(Series)是一维的,由一组有序的数据以及与之相关的索引组成,能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维数组。轴标签和下标统称为索引,可以通过索引来访问Series对象中的元素。

一,创建序列

序列的构造函数定义是:

pandas.Series(data=None, index=None, dtype=None, name=None, copy=False)

构造函数的参数:

  • data:传递给序列的数据,可以是ndarray、list或字典
  • index:设置索引标签,索引标签必须是唯一的,与data参数的长度相同。如果没有传递索引标签,那么默认值是 np.arange(n),或者 RangeIndex (0, 1, 2, …, n),如果data参数是dict,并且设置index参数,那么index参数会覆盖dict的key。
  • dtype:设置序列元素的数据类型,如果没有设置,那么将推断数据类型
  • name:序列是一个多行单列的结构,name是序列的名称
  • copy:复制数据,默认值是false

索引的下标是自动生成的,从0开始,加1递增。对于序列的data,可以通过序列的属性values来访问;对于序列的索引,可以通过序列的属性index来访问。

1,创建空的序列

s=pd.Series()

2,使用ndarray创建序列

创建ndarray的一维数组,构造序列,序列包含两部分:索引和序列值,如下所示

>>> data=np.array(['a','b'])
>>> pd.Series(data)
0    a
1    b
dtype: object

最左侧的0和1是行索引,a和b是值,在构造序列时,没有传递任何索引,默认情况下,pandas分配了从 0 到  len(data)-1  的索引,也可以在构造函数中传递自定义的索引列表,如下所示:

>>> 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

三,序列的属性

序列对象包含的属性:

  • array:把序列转换为数组
  • dtype:序列元素的数据类型
  • hasnan:序列是否包含nan
  • axes:序列的轴标签
  • index:序列的索引标签
  • values:序列的值属性
  • is_unique:序列的元素是否是唯一的
  • size:序列的元素数量
  • shape:序列的形状,表示各个维度的数量
  • ndim:维度的数量

四,序列的索引

序列对象还能通过属性来访问序列的元素值。

1,at和iat属性,用于访问单个序列元素值

at属性表示的是索引标签和元素值对,通过索引标签访问单个序列值

>>> sd.at['a']
13

iat属性表示的下表和元素值对,通过下表访问序列的单个元素值:

>>> sd.iat[1]
13

2,loc和iloc,通过序列的位置来访问元素

iloc:纯粹基于整数位置的索引,用于按位置选择序列元素

  • 单个位置索引,比如sd.iloc[1]
  • 位置索引的列表,比如 sd.iloc[[0,1]]
  • 整数序列,比如,sd.iloc[0:2]
  • 布尔值数组,sd.iloc[[True, False, True, False]]

loc:通过索引标签和布尔值数组来选择序列的元素

举个例子,通过整数序列来选择序列的元素:

>>> sd.iloc[0:2]
b    12
a    13

举个例子,通过索引的标签来选择序列的元素:

>>> sd.loc[['a','b']]
a    13
b    12
dtype: int64

3,ix属性

ix属性是最首要的标签-位置的索引器,具有整数位置的回退,注意,不推荐使用ix索引器。

  • .ix []支持基于整数和标签混合的访问,它主要基于标签,但将回退到整数位置访问,除非相应的轴是整数类型。
  • .ix是最常用的索引器,它将支持.loc和.iloc中的任何输入。
  • 但是,当轴基于整数时,仅支持基于标签的访问而非位置访问。 因此,在这种情况下,通常最好是明确的并使用.iloc或.loc。

举个例子,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

 

参考文档:

pandas Series

转载于:https://www.cnblogs.com/ljhdo/p/11514685.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值