pands基础--数据结构:Series

从本文开始介绍pandas的相关知识。

pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的。

本章节的代码引入pandas约定为:import pandas as pd,另外import numpy as np也会用到。

官方介绍:pandas - Python Data Analysis Library (pydata.org)

pandas数据结构介绍:主要有两种:Series和DataFrame。本文对Series进行简单介绍。

1 Series介绍

官方文档:pandas.Series — pandas 1.3.4 documentation (pydata.org)

1.1简介

Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据结构)以及一组与之相关的数据标签(即索引)组成。

1 >>> obj = pd.Series([4, 7, -5, 3])  
2 >>> obj
3 0    4
4 1    7
5 2   -5
6 3    3
7 dtype: int64

1.2表现形式

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

 1 >>> obj
 2 0    4
 3 1    7
 4 2   -5
 5 3    3
 6 dtype: int64
 7 >>>
 8 >>> obj.index
 9 RangeIndex(start=0, stop=4, step=1)
10 >>> obj.values
11 array([ 4,  7, -5,  3], dtype=int64)
12 >>>

如果希望所创建的Series带有一个可以对各个数据点进行标记的索引:

1 >>> obj2 = pd.Series([4, 5, 7, -3], index=['a', 'b', 'c', 'd'])
2 >>> obj2
3 a    4
4 b    5
5 c    7
6 d   -3
7 dtype: int64
8 >>> obj2.index
9 Index(['a', 'b', 'c', 'd'], dtype='object')

也可以通过字典来创建Series。如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)。

 1 >>> sdata = {'a':100, 'b':200, 'c':300} 
 2 >>> obj3 = pd.Series(sdata) 
 3 >>> obj3
 4 a    100
 5 b    200
 6 c    300
 7 dtype: int64
 8 >>> index = ['a', 'd', 'c']    
 9 >>> obj4 = pd.Series(sdata, index=index)
10 >>> obj4
11 a    100.0
12 d      NaN
13 c    300.0
14 dtype: float64
15 >>>

上面的例子中,索引为’d’的值为NaN,即“非数字”(not a number)。在pandas中,它用于表示确实或者NA值,使用缺失或NA表示缺失数据,另外isnull和notnull函数可用于检测缺失数据。

 1 >>> obj4
 2 a    100.0
 3 d      NaN
 4 c    300.0
 5 dtype: float64
 6 >>>
 7 >>> pd.isnull(obj4)
 8 a    False
 9 d     True
10 c    False
11 dtype: bool
12 >>> pd.notnull(obj4)  
13 a     True
14 d    False
15 c     True
16 dtype: bool

1.3索引方式

与普通NumPy数组相比,可以通过索引的方式选取Series中的单个或一组值。

1 >>> obj2['a'] 
2 4
3 >>> obj2[['a', 'b', 'c']]
4 a    4
5 b    5
6 c    7
7 dtype: int64
8 >>>

还可以将Series看作一个定长的有序字典,因为它是索引值到数据值的一个映射。

1 >>> 'b' in obj2 
2 True
3 >>> 'e' in obj2 
4 False

series的索引可以通过赋值的方式就地修改。

 1 >>> obj
 2 0    4
 3 1    7
 4 2   -5
 5 3    3
 6 dtype: int64
 7 >>> obj.index = ['a', 'b', 'c', 'd']
 8 >>> obj
 9 a    4
10 b    7
11 c   -5
12 d    3
13 dtype: int64
14 >>>

1.4基本运算

NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接。

 1 >>> obj2
 2 a    4
 3 b    5
 4 c    7
 5 d   -3
 6 dtype: int64
 7 >>> obj2[obj2 > 0] 
 8 a    4
 9 b    5
10 c    7
11 dtype: int64
12 >>> obj2 * 2      
13 a     8
14 b    10
15 c    14
16 d    -6
17 dtype: int64
18 >>> np.exp(obj2)       
19 a      54.598150
20 b     148.413159
21 c    1096.633158
22 d       0.049787
23 dtype: float64
24 >>>

1.5其他

对应用而言,Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。这个功能在后面进行讲解。

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

 1 >>> obj4 
 2 a    100.0
 3 d      NaN
 4 c    300.0
 5 dtype: float64
 6 >>> obj4.name = 'n1' 
 7 >>> obj4.index.name = 'pharse' 
 8 >>> obj4
 9 pharse
10 a    100.0
11 d      NaN
12 c    300.0
13 Name: n1, dtype: float64 
posted @ 2020-02-02 14:09  zhengcixi  阅读(702)  评论(0编辑  收藏  举报
回到顶部