pandas应用入门(六)
我们再来看看Index
类型,它为Series
和DataFrame
对象提供了索引服务,有了索引我们就可以排序数据(sort_index
方法)、对齐数据(在运算和合并数据时非常重要)并实现对数据的快速检索(索引运算)。由于DataFrame
类型表示的是二维数据,所以它的行和列都有索引,分别是index
和columns
。Index
类型的创建的比较简单,通常给出data
、dtype
和name
三个参数即可,分别表示作为索引的数据、索引的数据类型和索引的名称。由于Index
本身也是一维的数据,索引它的方法和属性跟Series
非常类似,你可以尝试创建一个Index
对象,然后尝试一下之前学过的属性和方法在Index
类型上是否生效。接下来,我们主要看看Index
的几种子类型。
范围索引
范围索引是由具有单调性的整数构成的索引,我们可以通过RangeIndex
构造器来创建范围索引,也可以通过RangeIndex
类的类方法from_range
来创建范围索引,代码如下所示。
代码:
sales_data = np.random.randint(400, 1000, 12)
index = pd.RangeIndex(1, 13, name='月份')
ser = pd.Series(data=sales_data, index=index)
ser
输出:
月份
1 703
2 705
3 557
4 943
5 961
6 615
7 788
8 985
9 921
10 951
11 874
12 609
dtype: int64
分类索引
分类索引是由定类尺度构成的索引。如果我们需要通过索引将数据分组,然后再进行聚合操作,分类索引就可以派上用场。分类索引还有一个名为reorder_categories
的方法,可以给索引指定一个顺序,分组聚合的结果会按照这个指定的顺序进行呈现,代码如下所示。
代码:
sales_data = [6, 6, 7, 6, 8, 6]
index = pd.CategoricalIndex(
data=['苹果', '香蕉', '苹果', '苹果', '桃子', '香蕉'],
categories=['苹果', '香蕉', '桃子'],
ordered=True
)
ser = pd.Series(data=sales_data, index=index)
ser
输出:
苹果 6
香蕉 6
苹果 7
苹果 6
桃子 8
香蕉 6
dtype: int64
基于索引分组数据,然后使用sum
进行求和。
ser.groupby(level=0).sum()
输出:
苹果 19
香蕉 12
桃子 8
dtype: int64
指定索引的顺序。
ser.index = index.reorder_categories(['香蕉', '桃子', '苹果'])
ser.groupby(level=0).sum()
输出:
香蕉 12
桃子 8
苹果 19
dtype: int64
多级索引
Pandas 中的MultiIndex
类型用来表示层次或多级索引。可以使用MultiIndex
类的类方法from_arrays
、from_product
、from_tuples
等来创建多级索引,我们给大家举几个例子。
代码:
tuples = [(1, 'red'), (1, 'blue'), (2, 'red'