Pandas的数据结构介绍--------Series

要使用pandas,我们必须先了解它的两个主要的数据结构:Series,DataFrame

  • Series
    它是一种类似于一维数组的对象,由一组数据(各种Numpy数据类型)以及一种与之相关的数据标签(即索引)组成。仅仅由一种数据就可以产生最简单的Series:
In [3]: obj = Series([1,4,5,3])

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

Series的字符串表现形式为:索引在左边,其值在右边。因为没有对数据指定索引值,所以会自动创建一个0~N-1(N为数据的长度)的整数型索引。
我们可以通过Series的values和index属性获取其数组表示形式和索引对象:

In [5]: obj.values
Out[5]: array([1, 4, 5, 3])
In [7]: obj.index
Out[7]: RangeIndex(start=0, stop=4, step=1)

创建一个可以对各个数据点进行标记的索引的Series:

In [8]: obj2 = Series([1,3,5,3],index=['a','d','g','r'])

In [9]: obj2
Out[9]: 
a    1
d    3
g    5
r    3
dtype: int64
In [12]: obj2.index
Out[12]: Index(['a', 'd', 'g', 'r'], dtype='object')

我们还可以将Series看成是一个定长的有序字典,因为它是一个从索引值到数据值的映射。它可以用在许多原本需要字典参数的函数中:

In [13]: 'a' in obj2
Out[13]: True

In [14]: 'b' in obj2
Out[14]: False

如果数据被存放在一个Python字典中,也可以直接通过该字典来创建Series:

In [15]: dict1 = {'iphone':100,'xiaomi':200,'huawei':400}

In [16]: obj3 = Series(dict1)

In [17]: obj3
Out[17]: 
iphone    100
xiaomi    200
huawei    400
dtype: int64

如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)

In [18]: states = ['xiaomi','apple','huawei','vivo']

In [19]: obj4 = Series(dict1,index=states)

In [20]: obj4
Out[20]: 
xiaomi    200.0
apple       NaN
huawei    400.0
vivo        NaN
dtype: float64

在上面这个例子中,dict1中跟states索引相匹配的那两个值会被找出来并放到相应的位置上。但是由于‘apple’和‘vivo’所对应的dict1值找不到,所以其结果久违NaN(即非数字,在pandas中,它用于表示缺失或者NA值)。在pandas中,可以用isnull和notnull函数检测缺失数据:

In [21]: pd.isnull(obj4)
Out[21]: 
xiaomi    False
apple      True
huawei    False
vivo       True
dtype: bool
In [22]: pd.notnull(obj4)
Out[22]: 
xiaomi     True
apple     False
huawei     True
vivo      False
dtype: bool

Series也有类似的实例方法:

In [24]: obj4.isnull()
Out[24]: 
xiaomi    False
apple      True
huawei    False
vivo       True
dtype: bool

对于许多应用来说,Series最重要的一个功能就是:它在算术运算中会自动对齐不同索引的数据:

In [25]: obj3
Out[25]: 
iphone    100
xiaomi    200
huawei    400
dtype: int64

In [26]: obj4
Out[26]: 
xiaomi    200.0
apple       NaN
huawei    400.0
vivo        NaN
dtype: float64

In [27]: obj3+obj4
Out[27]: 
apple       NaN
huawei    800.0
iphone      NaN
vivo        NaN
xiaomi    400.0
dtype: float64

Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:

In [29]: obj4.index.name = 'Type'

In [30]: obj4.name = 'number'

In [31]: obj4
Out[31]: 
Type
xiaomi    200.0
apple       NaN
huawei    400.0
vivo        NaN
Name: number, dtype: float64

Series的索引可以通过赋值的方式被就地修改

In [32]: obj.index = [' bob','alice','coco','anan']

In [33]: obj
Out[33]: 
 bob     1
alice    4
coco     5
anan     3
dtype: int64
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值