Pandas库的Series类型

本文的主要内容是基于中国大学mooc(慕课)中的“Python数据分析与可视化”课程进行整理和总结。

Series的定义与创建

Series类型由一组数据及与之相关的数据索引组成,Pandas特别强调数据和索引之间的关系,Series类型索引与数据之间一一对应。

a = pd.Series([9,8,7,6])
a
0    9
1    8
2    7
3    6
dtype: int64

输出结果中,左边一列为输出索引,右边一列为值,由于Pandas是基于Numpy实现的扩展的数据分析库,其中所有数据的类型沿用了Numpy种类型,dtype:init64表示64位的整数类型。
除了自动索引之外,Series提供了更为强大的自定义索引功能。

b = pd.Series([9,8,7,6],index=['a','b','c','d'])
b
a    9
b    8
c    7
d    6
dtype: int64

可以发现,索引变成了自定义的索引列表,在此可以省略index=,直接给出索引。
Series可以由如下类型创建:

  • Python列表创建,如上述例子所示。
  • 标量值
s = pd.Series(25,index=['a','b','c'])
s
a    25
b    25
c    25
dtype: int64

此时为了创建一个Series类型,必须要增加index,用以告诉Series几个元素构成,标签是多少。

  • Python字典
c = pd.Series({'a':9,'b':8,'c':7,'d':6})
c
a    9
b    8
c    7
d    6
dtype: int64

使用字典生成Series类型,keys对应index,value对应值。除此之外,字典类型还有另外的操作方法:

d = pd.Series({'a':9,'b':8,'c':7,'d':6},index=['c','a','b','d','e'])
d
c    7.0
a    9.0
b    8.0
d    6.0
e    NaN
dtype: float64

由index指定Series结构(顺序),并从前面的字典类型种选取对应值。

  • ndarray
e = pd.Series(np.arange(6))
e
0    0
1    1
2    2
3    3
4    4
5    5
dtype: int32
f = pd.Series(np.arange(6),index=(np.arange(9,3,-1)))
f
9    0
8    1
7    2
6    3
5    4
4    5
dtype: int32
  • 其他函数

Series的基本操作

  • 由于Series包含索引和值两个部分,所以基本操作可以分为索引部分和值部分;
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
b
a    9
b    8
c    7
d    6
dtype: int64
b.index
Index(['a', 'b', 'c', 'd'], dtype='object')
b.values
b.values
array([9, 8, 7, 6], dtype=int64)

可以发现b.index输出的索引,类型就叫index,实际上Pandas索引是存在一个类型的,就叫index类型,b.values输出的是array,属于Numpy的类型。
由此可以知道,Series类型将Numpy的类型作为保留值的类型,而自己关联了索引,索引是Pandas内部自己建立的名为index 的类型,index和Numpy的array结合起来就是一个Series类型。

b['b']
8
b[1]
8

可以看到,当index为自定义时,我们仍能够使用默认的从0开始的索引得到对应的值,那我们能混合使用吗?

b[['a','b',2]]
a    9.0
b    8.0
2    NaN
dtype: float64

可以发现,两套索引并存,但是不能混用。

  • Series类型的操作类似ndarray类型;
    索引方法相同,使用[];
    Numpy中针对ndarray的操作也可以用于Series类型;
    可以使用自定义索引的列表进行切片;
    也可以使用自定义索引进行切片,如果存在自定义索引,则一同被切片;
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
b
a    9
b    8
c    7
d    6
dtype: int64
b[3]
6
b[:3]
a    9
b    8
c    7
dtype: int64

可以发现,如果我们索引一个元素,那么我们得到的是索对应的值,当我们使用自定义索引对Series进行切片时,得到的结果仍然是Series类型,有索引和值两个部分,我们也可以使用 比较关系进行索引。

b [b > b.median()]
b [b > b.median()]
a    9
b    8
dtype: int64

取b中大于b中位数的Series部分。

np.exp(b)
a    8103.083928
b    2980.957987
c    1096.633158
d     403.428793
dtype: float64
  • Series类型的操作类似Python字典类型;
    通过自定义索引访问;
    保留字in操作;
    使用get()方法;
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
b
a    9
b    8
c    7
dtype: int64
b['b']
8

由此可以看出通过访问值对应的索引获取值。

'c'in b
True
0 in b
False

Python的字典类型中有一个保留字in,用以判断字典类型的键在不在键值对中的键的范围中,这里可以用in判断一个数据是不是在Series索引的列表中,‘c’是b索引的一部分,所以为True,0 in b为False,因为0不在b 的索引中,不会判断自动索引。

b.get('f',100)
100

使用字典中的get()函数,从b中提取标签(索引)f对应的值,若这个值不存在,就把100返回,若存在,就返回f对应的值。

Series的对齐操作

Series + Series

a = pd.Series([1,2,3],['c','d','e'])
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
a + b
a    NaN
b    NaN
c    8.0
d    8.0
e    NaN
dtype: float64

在Series对象进行操作的时候,更应该考虑他们的索引,上述a+b的结果是索引相同的值进行运算,不同的值不进行运算,得到了五个元素的对象,a中没有b的索引时,相加得到的值为空(NaN),这个概念叫做对其,也就是Series类型在运算中会自动对齐不同索引的数据,相比Numpy的中的运算 ,由于Numpy只关心数据的维度,当不同维度相加时,就会报错,无法得到结果,而Series的运算是基于索引的运算,这是更加精确的。

Series的name属性

Series对象和索引都可以有一个名字,存储在属性.name中。

b = pd.Series([9,8,7,6],index=['a','b','c','d'])
b.name
b.name = 'Series对象'
b.index.name = '索引列'
b
索引列
a    9
b    8
c    7
d    6
Name: Series对象, dtype: int64

可以看到,没有对name进行定义前,b.name无输出,b.name进行指定后得到Series的名字或者对应值的名字,b.index.name进行指定后得到索引列的名字。
同时Series对象可以随时修改并立刻生效。

b = pd.Series([9,8,7,6],index=['a','b','c','d'])
b.name
b['a'] = 15
b.name = "Series"
b
a    15
b     8
c     7
d     6
Name: Series, dtype: int64
b.name = "New Series"
b[1:3] = 20
b
a    15
b    20
c    20
d     6
Name: New Series, dtype: int64
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值