跳到主要内容

Pandas 层次化索引

1. 前言

上一节我们学习了字符串的一些操作函数,对于字符串数据的分析有一定的帮助,有利于我们在数据值上的处理和分析。在这之前我们接触到的数据集的索引都是单个层次,行索引或者列索引,除此之外,Pandas 库中的数据集还存在层次化的索引,极大的提升了数据集所能表现的数据维度,下面将详细学习 Pandas 库中的层次化索引知识。

2. 什么是层次化索引

层次化索引是 Pandas 的一个重要功能,是指在一个轴上有至少两个级别的索引值,层次化索引的好处是我们可以方便的使用低纬度索引形式去表示高纬度的数据,下面我们看一下层次化索引的具体数据表现:

# 1. 构造了一个 Series 数据集
obj=pd.Series([12,23,34,45],index=[["a","a","b","b"],[1,2,3,4]])
print(obj)
# --- 输出结果 ---
a 1 12
2 23
b 3 34
4 45
# 结果解析:可以看到这里和我们第5小节讲到的 Series 有点不一样的地方,在他的索引列前面还有一列,值为 'a','b' 这也是索引,有两层索引,因此之前的二维数据结构 Series 通过层次化的索引,就可以表示3维的数据集。

# 2. 构造了一个 DataFrame 数据集
df1=pd.DataFrame([[96,92,83,94],[85,86,77,88],[69,90,91,82],[83,84,85,86],[83,84,85,86],[83,84,85,86]],index=[['2018年','2018年','2018年','2019年','2019年','2019年'],['语文','数学','英语','语文','数学','英语']],columns=[['上学期','上学期','下学期','下学期'],['期中考试','期末考试','期中考试','期末考试']])
print(df1)
# --- 输出结果 ---
上学期 下学期
期中考试 期末考试 期中考试 期末考试
2018年 语文 96 92 83 94
数学 85 86 77 88
英语 69 90 91 82
2019年 语文 83 84 85 86
数学 83 84 85 86
英语 83 84 85 86
# 结果解析:这里我们构造了一个 DataFrame 数据集,在行索引和列索引我们均设置了层次化的索引,这样能更加有效的表示高纬度的数据。

3. 层次化索引数据的选取

对于 Pandas 库数据集具有多层索引值,我们可以对一级索引通过 loc () 函数获取数据子集:

# df1 原数据集,是上面我们自己创建的具有两层列索引和两层行索引的数据集
print(df1.loc['2018年','上学期'])
# --- 输出结果 ---
期中考试 期末考试
语文 96 92
数学 85 86
英语 69 90
# 结果解析:我们通过 loc() 函数传入行和列的一级索引,可以看到得到了一个 DataFrame 数据子集

print(df1.loc[:,'上学期'])
# --- 输出结果 ---
期中考试 期末考试
2018年 语文 96 92
数学 85 86
英语 69 90
2019年 语文 83 84
数学 83 84
英语 83 84
# 结果解析:这里我们获取了列索引中的上学期的子集,可以看到输出结果中行索引还是两级索引

4. 小结

本节课程我们主要学习了 Pandas 库中的层次化索引,利用数据集的层次化索引,我们可以表示更高维度的数据集,用于处理更复杂的数据。本节课程的重点如下:

  • 了解 Pandas 层次化索引在数据集中的具体表现形式;
  • 掌握 Pandas 层次化索引中数据子集的获取方式。