Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

附录:Series数据结构

Series是Pandas的两个常用的数据结构之一,还有一个是DataFrame。

这两个常用数据结构能够解决绝大数在数据处理任务中遇到的问题。

那什么是Series呢?

Series is a one-dimensional labeled array capable of holding any data type (integers, strings, floating point numbers, Python objects, etc.). The axis labels are collectively referred to as the index. ————Pandas官方

Series是一个一维带标签的数组,可以保存任何数据类型(整数、字符串、浮点数、Python对象等)。轴标签统称为索引。

1.创建Series

1.1 使用列表进行创建

使用pandas.Series的方法来创建Series对象,里面包含一个列表,这里Series第一个字母需要大写。例如:

import pandas as pd
s = pd.Series([4, 5, 6])
s
0 4 1 5 2 6 dtype: int64

在交互环境里,左边一侧是索引,右边一侧是值。当我们不给Series指定索引时,pandas默认生成的索引是从0到N-1(N是数据长度),这里N是3。

通过value和index属性分别获得Series对象的值和属性。

s.values
array([4, 5, 6])
s.index
RangeIndex(start=0, stop=3, step=1)

我们使用type看下Series.values的数据类型,如下显示它是一个Numpy数组。

type(s.values)
numpy.ndarray

1.2 添加索引进行创建

在创建Series的时候,通过指定索引序列,来标识每个值:

s2 = pd.Series([4, 5, 6], index=['a', 'b', 'c'])
s2
a 4 b 5 c 6 dtype: int64

当Series拥有索引时,选取数据时可以指定索引:

s2['a']
4
s2[['b', 'a']]
b 5 a 4 dtype: int64

类似Numpy使用布尔值对数组进行过滤,Series的操作也类似:

s2[s2>0]
a 4 b 5 c 6 dtype: int64
s2 * 2
a 8 b 10 c 12 dtype: int64
import numpy as np
np.exp(s2)  
a 54.598150 b 148.413159 c 403.428793 dtype: float64

1.3 使用字典来创建

post_code = {'Shanghai':200000, 'Beijing': 100000, 'Tianjing': 300000, 'Chongqing':400000}
s3 = pd.Series(post_code)
s3
Shanghai 200000 Beijing 100000 Tianjing 300000 Chongqing 400000 dtype: int64

2.修改索引

使用以下方法进行Series的索引修改:

s3.index = ["SH", "BJ", "TJ", "CQ"]
s3
SH 200000 BJ 100000 TJ 300000 CQ 400000 dtype: int64

3. 选取元素

我们可以使用以下三种方式来选取某一个元素:

s3["Shanghai"]
200000
s3.loc["Shanghai"]
200000
s3.iloc[0]   #使用整数索引[0, 1, 2, 3]
200000

选取多个元素,可以使用:

s3[['Shanghai', 'Beijing','Tianjing']]
Shanghai 200000 Beijing 100000 Tianjing 300000 dtype: int64

4. 切片

如果是作切片操作,使用以下方式:

s3.loc["Shanghai":"Tianjing"]
Shanghai 200000 Beijing 100000 Tianjing 300000 dtype: int64
s3.iloc[:3]   #使用整数索引[0, 1, 2, 3]  
Shanghai 200000 Beijing 100000 Tianjing 300000 dtype: int64

5.排序

pandas下面的排序,使用sort_values:

s3.sort_values()
Beijing 100000 Shanghai 200000 Tianjing 300000 Chongqing 400000 dtype: int64

如果是从大到小,使用参数ascending=False,ascending表示升序,所以令其等于False

s3.sort_values(ascending=False)
Chongqing 400000 Tianjing 300000 Shanghai 200000 Beijing 100000 dtype: int64