![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=1739542332-JAXpOgT7wctahQIVW14izWl8M4RIfv9D-0-3472117a5c77dc875cdb160e457b545f)
运行上述代码,创建的数据集如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_14.jpg?sign=1739542332-8q7BlQ7lBu1EJZjkzgIdIG3SZVz1CPHG-0-2a0137f7e1b48d0732d5986ab1aa194d)
使用index(索引)可以查看所有数据集,默认是从0开始步长为1的数值索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_15.jpg?sign=1739542332-acM5DTRE5fTIcu8fpIfPzL1m0396OjdJ-0-8475ebf91d4e20a83a34238204e30228)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_16.jpg?sign=1739542332-YTrmIALZt0dskS4WyeWcxNqHrWVyChiN-0-2374758ac18d52e28b56d2a4b7027876)
set_index()函数可以将其一列转换为行索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_17.jpg?sign=1739542332-DRlxNgtfSg2ENOVRrqhI8y0DBNjjPUCA-0-42dc3519d37363d273a1a3dab1d91cf2)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_18.jpg?sign=1739542332-3fVOcmJYPLUtlBRkIG11xR5XnuGLGzrU-0-60f403ab8a6d5c636d6025ef72a6ef8a)
set_index()函数还可以将其多列转换为行索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_19.jpg?sign=1739542332-dBxRaFFxE4mfBBOIAfO2QcmKb8r2ZehA-0-d574c3aa468b8aac7e1454f6c6f0810a)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_20.jpg?sign=1739542332-16FO0qTRBMARyaQwocrix32ExOrMSoay-0-4edebe0bc73f1c1ebb0484e5e226a382)
在默认情况下,索引列字段会从数据集中移除,但是通过设置drop参数也可以将其保留下来,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_21.jpg?sign=1739542332-QIIJ5IVgG9pPzEtZHb8nsEArFBkQCCKE-0-04e407cc422f2e792f236b8bb2499360)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_22.jpg?sign=1739542332-hIZLMkvmJUeWN48q76c9jFXppG76JXAX-0-f041c55f2ac2d800c9d8991d437b2fa7)
3.2.2 unstack()函数:重构索引
reset_index()函数的功能与set_index()函数的功能相反,层次化索引的级别会被转移到数据集中的列里面,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_23.jpg?sign=1739542332-HCDuXgT3Rdy3CredjKYkDHnUEv0hZAc0-0-36ca3719dff3fd9f0a38b5c9da9c1714)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_24.jpg?sign=1739542332-jHWlvdwSVwfZ6pILx1rlP5EqY0AWEoWR-0-782332ad9772fabb7e5870f1c2c6ea00)
可以通过unstack()函数对数据集进行重构,其功能类似于pivot()函数的功能,不同之处在于,unstack()函数是针对索引或标签的,即将列索引转成最内层的行索引;而pivot()函数则是针对列的值,即指定某列的值作为行索引,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_25.jpg?sign=1739542332-SAY8SmgcQgGGfMFupBY6h8G9iHcKJkeL-0-6c14e74ba3f317cd4ab9c7d782ab2ad9)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_26.jpg?sign=1739542332-gjYBDVDifVyWGlwaANCeCT5Gaudx0h1o-0-3141068b0460d2f9544cf89ecf06807a)
此外,stack()函数是unstack()函数的逆运算,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_27.jpg?sign=1739542332-dvXXSrfWJLhln7IgRhpK475SeSz7ybgw-0-e1d84e07fc59f7ea8e4ed08373c30418)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_28.jpg?sign=1739542332-wynvCaMnZjmntO57ftLFUSgM6SgQjVEV-0-d8506068da1ff24caab3ed5e57d88121)
3.2.3 swaplevel()函数:调整索引
有时,可能需要调整索引的顺序,swaplevel()函数接受两个级别编号或名称,并返回一个互换了级别的新对象。例如,对学期和课程的索引级别进行调整,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_29.jpg?sign=1739542332-2t1O9q2NWmFL6JHyjqkn3gmjjgDae1Ok-0-f0e74931d37e46aee5facc45283b1ee7)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_30.jpg?sign=1739542332-3dhgfiupmsxn0oLxm7LDKwMDqwuSNuk0-0-fc8975778332efba370447a0bddf2e86)
sort_index()函数可以对数据进行排序,参数level设置需要排序的列。需要注意的是,这里的列包含索引列,第1列是0(“学期”列),第2列是1(“课程”列),代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_31.jpg?sign=1739542332-yOAtQkwOc6JQG8Rrpy801U68QNDPhv0Q-0-5315b8ccf3793c68d2f6f10f9a9a968b)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt004_32.jpg?sign=1739542332-Hq8an3wLKTucbg0Qsss8Teg4NmNux6Sf-0-bdb657514cef976c1722989fca9c5c51)