附录: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对象等)。轴标签统称为索引。
使用pandas.Series的方法来创建Series对象,里面包含一个列表,这里Series第一个字母需要大写。例如:
import pandas as pd
s = pd.Series([4, 5, 6])
s0 4
1 5
2 6
dtype: int64在交互环境里,左边一侧是索引,右边一侧是值。当我们不给Series指定索引时,pandas默认生成的索引是从0到N-1(N是数据长度),这里N是3。
通过value和index属性分别获得Series对象的值和属性。
s.valuesarray([4, 5, 6])s.indexRangeIndex(start=0, stop=3, step=1)我们使用type看下Series.values的数据类型,如下显示它是一个Numpy数组。
type(s.values)numpy.ndarray1.2 添加索引进行创建¶
在创建Series的时候,通过指定索引序列,来标识每个值:
s2 = pd.Series([4, 5, 6], index=['a', 'b', 'c'])
s2a 4
b 5
c 6
dtype: int64当Series拥有索引时,选取数据时可以指定索引:
s2['a']4s2[['b', 'a']]b 5
a 4
dtype: int64类似Numpy使用布尔值对数组进行过滤,Series的操作也类似:
s2[s2>0]a 4
b 5
c 6
dtype: int64s2 * 2a 8
b 10
c 12
dtype: int64import numpy as np
np.exp(s2) a 54.598150
b 148.413159
c 403.428793
dtype: float641.3 使用字典来创建¶
post_code = {'Shanghai':200000, 'Beijing': 100000, 'Tianjing': 300000, 'Chongqing':400000}
s3 = pd.Series(post_code)
s3Shanghai 200000
Beijing 100000
Tianjing 300000
Chongqing 400000
dtype: int642.修改索引¶
使用以下方法进行Series的索引修改:
s3.index = ["SH", "BJ", "TJ", "CQ"]
s3SH 200000
BJ 100000
TJ 300000
CQ 400000
dtype: int643. 选取元素¶
我们可以使用以下三种方式来选取某一个元素:
s3["Shanghai"]200000s3.loc["Shanghai"]200000s3.iloc[0] #使用整数索引[0, 1, 2, 3]200000选取多个元素,可以使用:
s3[['Shanghai', 'Beijing','Tianjing']]Shanghai 200000
Beijing 100000
Tianjing 300000
dtype: int644. 切片¶
如果是作切片操作,使用以下方式:
s3.loc["Shanghai":"Tianjing"]Shanghai 200000
Beijing 100000
Tianjing 300000
dtype: int64s3.iloc[:3] #使用整数索引[0, 1, 2, 3] Shanghai 200000
Beijing 100000
Tianjing 300000
dtype: int645.排序¶
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