![Python+Office:轻松实现Python办公自动化](https://wfqqreader-1252317822.image.myqcloud.com/cover/834/40107834/b_40107834.jpg)
3.2 数据的索引
索引是对数据中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据中的特定信息。本节将会介绍Python如何创建索引、重构索引、调整索引等,使用的数据文件为“2020年两个学期学生考试成绩.xls”。
3.2.1 set_index()函数:创建索引
在创建索引之前,先创建一个由4名学生考试成绩构成的数据集,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_13.jpg?sign=1738855775-wG2MbQR629cSD2QgEsM5LPSBaIjhpJQf-0-05932b97033d63687f9f7886cb9f10ca)
运行上述代码,创建的数据集如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_14.jpg?sign=1738855775-dI78Y2zatq2dzKHGWuSzHR2aFrqeiCA9-0-07b6ef6711ad934edf4fb2232be17962)
使用index(索引)可以查看所有数据集,默认是从0开始步长为1的数值索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_15.jpg?sign=1738855775-lxo8Rt1Sfk05uoHEf2K0QxV3ZUD61X9D-0-74f3931533d8b6535ba945732c94c919)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_16.jpg?sign=1738855775-g5ktX2Cvn0qhbbp0exKmWSy5fatPB6XA-0-1e672aaebb9343185158c98299b16b6b)
set_index()函数可以将其一列转换为行索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_17.jpg?sign=1738855775-wnIuLvCHbGsYFZAvVPbscgnNod3Id2ED-0-fa88107c145b6fec072f18b25be68fb4)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_18.jpg?sign=1738855775-cFk2dgXRF42BqKIm4x0oRIfKp0Gvptl4-0-fe6989962a44b6ab296aa510a2c976a2)
set_index()函数还可以将其多列转换为行索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_19.jpg?sign=1738855775-CBlVTxxFyBuGm10KAEF0UhhCgiLORrCY-0-1cd54ef7a124e854b1c5dca75ff54d89)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_20.jpg?sign=1738855775-IFDaJuqLZZDSHs7hGWEemFwxd1oLWPcb-0-d961b20933fe0f8200a5572d59fae1ab)
在默认情况下,索引列字段会从数据集中移除,但是通过设置drop参数也可以将其保留下来,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_21.jpg?sign=1738855775-JV1HIO3LyZR53ikAnmi6SAmrP3hpxcX9-0-3f150d62092e38ff151b1e5c70990ba4)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_22.jpg?sign=1738855775-Hymw81uWBvzFlEU0663IzK1WmMdDcMtH-0-11249dd708d8a7926cb90f0fc7f569f4)
3.2.2 unstack()函数:重构索引
reset_index()函数的功能与set_index()函数的功能相反,层次化索引的级别会被转移到数据集中的列里面,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_23.jpg?sign=1738855775-OLDmgRdtBBUh5HYroSH2CeGLXPV6aBSB-0-8926520a9331873dd029d88f0b2448fb)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_24.jpg?sign=1738855775-1KtRhbO7lAlyb8tp7DT4Z22PXkBcfXpA-0-70e13eba2a139f8c3b616531cb7f606a)
可以通过unstack()函数对数据集进行重构,其功能类似于pivot()函数的功能,不同之处在于,unstack()函数是针对索引或标签的,即将列索引转成最内层的行索引;而pivot()函数则是针对列的值,即指定某列的值作为行索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_25.jpg?sign=1738855775-FYJqIdAk9kKfByVWTNANGdDV5ljfr1iO-0-57e43736c70914ba0a7cc335ff4b2a39)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_26.jpg?sign=1738855775-O388j13JpUqo4nFe8svWmpvTKHUl81MU-0-8158fe0ab14ce43443af0caef6c3a6d9)
此外,stack()函数是unstack()函数的逆运算,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_27.jpg?sign=1738855775-xd76udRzgMjshLZiS6Vx5ngp7tuanZPe-0-b21a55a47bf714d4ea90a9293a4d0385)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_28.jpg?sign=1738855775-JG7ywhH5OmnYEbjMqPjm907u4ejy9DDA-0-54d417f0d2923af11f61caf7f717b411)
3.2.3 swaplevel()函数:调整索引
有时,可能需要调整索引的顺序,swaplevel()函数接受两个级别编号或名称,并返回一个互换了级别的新对象。例如,对学期和课程的索引级别进行调整,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_29.jpg?sign=1738855775-MyyksRlYoTcrfWJZN4Xmnac2ESl8SSxB-0-3f2605d96f22f8181864d7dc357b2f63)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_30.jpg?sign=1738855775-Mc8p9oQub5e7KwhVbCIg0j58S2zmVCmG-0-cf1e188576445252c40a8b0b392746ec)
sort_index()函数可以对数据进行排序,参数level设置需要排序的列。需要注意的是,这里的列包含索引列,第1列是0(“学期”列),第2列是1(“课程”列),代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_31.jpg?sign=1738855775-pBUjPgwGuNF26PMXLAAKUBUfQmTtl4m5-0-5839dface505ff9c60f128cb90785e91)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_32.jpg?sign=1738855775-Fr7yYU3UDa6TQxevS7vZS4PwOl65vccN-0-b05005630eae54ed45dbdf37841f7253)