pandas数据结构(一):Series

为了入门pandas,首先要了解两个常见的数据结构:Series和DataFrame。本篇文章首先介绍Series,包括Series的基本结构、基本属性等,着重介绍Series的索引。

Series的基本结构

Series是一维的数组型对象,它包含了一个值序列,一个索引序列,还有一个标识数据类型的dtype属性。在Python交互环境中,索引序列在左边,值序列在右边。

In [2]: obj = pd.Series([2, 4, 6, 8])

In [3]: obj
Out[3]:
0    2
1    4
2    6
3    8
dtype: int64

上图在创建Series对象时,没有指定索引,自动生成了从0到N-1的索引序列,其中N是数据的长度。如果想要自己指定索引,可以通过index关键词传递。

In [4]: obj = pd.Series([1, 3, 5, -7], index=['a', 'b', 'c', 'd'])

In [5]: obj
Out[5]:
a    1
b    3
c    5
d   -7
dtype: int64

从另一个角度考虑Series,可以将其看成一个长度固定且有序的字典。可以直接向pd.Series()传递一个字典对象,生成Series对象。

In [6]: sdata = {'Ohio': 35000, 'Texas':71000, 'Oregon': 16000, 'Utea': 5000}

In [7]: obj1 = pd.Series(sdata)
In [8]: obj1
Out[8]:
Ohio      35000
Texas     71000
Oregon    16000
Utea       5000
dtype: int64

字典的key自动变成Series的索引序列,如果想要选取字典中的部分数据或者更改键值对的顺序,可以通过index关键词传递。

In [9]: obj2 = pd.Series(sdata, index=['California', 'Ohio', 'Oregon', 'Utea'])

In [10]: obj2 # sdata中没有California,因此生成的obj2的值为NaN。
Out[10]:
California        NaN
Ohio          35000.0
Oregon        16000.0
Utea           5000.0
dtype: float64

Series的基本属性

  • obj.values属性

  • obj.index属性

In [11]: obj
Out[11]:
a    1
b    3
c    5
d   -7
dtype: int64

In [12]: obj.values # 通过obj.values属性获取Series的值
Out[12]: array([ 1,  3,  5, -7], dtype=int64)

In [13]: obj.index # 通过obj.index属性获取Series的索引
Out[13]: Index(['a', 'b', 'c', 'd'], dtype='object')
  • obj.name属性
  • obj.index.name属性
In [17]: obj.name = 'number' 
In [18]: obj.index.name = 'label'

In [19]: obj
Out[19]:
label
a    1
b    3
c    5
d   -7
Name: number, dtype: int64

Series的索引

  • 通过索引选取数据或赋值
In [20]: obj['a']
Out[20]: 1

In [21]: obj['a'] = 100
In [22]: obj
Out[22]:
label
a    100
b      3
c      5
d     -7
Name: number, dtype: int64
  • 通过布尔索引过滤数据
In [23]: obj[obj>0]
Out[23]:
label
a    100
b      3
c      5
Name: number, dtype: int64
  • 特殊的神奇索引
    神奇索引是指由整数序列所构成的索引,序列中的整数表示选取顺序,从而实现按照指定的顺序选取数据。如下所示:
In [26]: arr = np.empty((8, 4))
In [27]: for i in range(8):
    ...:     arr[i] = i
    ...:
    
In [28]: arr
Out[28]:
array([[0., 0., 0., 0.],
       [1., 1., 1., 1.],
       [2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [6., 6., 6., 6.],
       [7., 7., 7., 7.]])

In [29]: arr[[5, 3, 7 , 1]]
Out[29]:
array([[5., 5., 5., 5.],
       [3., 3., 3., 3.],
       [7., 7., 7., 7.],
       [1., 1., 1., 1.]])

在Series中也有类似的功能,只不过这里的索引序列即可以是整数序列,也可以是字符串序列。

In [30]: obj
Out[30]:
label
a    100
b      3
c      5
d     -7
Name: number, dtype: int64

In [31]: obj[['b', 'c', 'a']]
Out[31]:
label
b      3
c      5
a    100
Name: number, dtype: int64
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值