更新時(shí)間:2023-01-29 來源:黑馬程序員 瀏覽量:
前面所涉及的Pandas對象都只有一層索引結(jié)構(gòu)(行索引、列索引),又稱為單層索引,層次化索引可以理解為單層索引的延伸,即在一個(gè)軸方向上具有多層索引。
對于兩層索引結(jié)構(gòu)來說,它可以分為內(nèi)層索引和外層索引。以某些省市的面積表格為例,我們來認(rèn)識一下什么是層次化索引,具體如圖3-6所示。
圖3-6 層次化索引圖示
在圖3-6中,按照從左往右的順序,位于最左邊的一列是省的名稱,表示外層索引,位于中間的一列是城市的名稱,表示內(nèi)層索引,位于最右邊的一列是面積的大小,表示數(shù)據(jù)。
Series和DataFrame均可以實(shí)現(xiàn)層次化索引,最常見的方式是在構(gòu)造方法的index參數(shù)中傳入一個(gè)嵌套列表。接下來,以圖3-6為例,創(chuàng)建具有兩層索引結(jié)構(gòu)的Series和DataFrame對象,具體如下:
(1)創(chuàng)建具有兩層索引結(jié)構(gòu)的Series對象,具體代碼如下。
In [65]: import numpy as np import pandas as pd mulitindex_series = pd.Series([15848,13472,12073.8, 7813,7446,6444,15230,8269], index=[['河北省','河北省','河北省','河北省', '河南省','河南省','河南省','河南省'], ['石家莊市','唐山市','邯鄲市','秦皇島市', '鄭州市','開封市','洛陽市','新鄉(xiāng)市']]) mulitindex_series Out[65]: 河北省 石家莊市 15848.0 唐山市 13472.0 邯鄲市 12073.8 秦皇島市 7813.0 河南省 鄭州市 7446.0 開封市 6444.0 洛陽市 15230.0 新鄉(xiāng)市 8269.0
上述示例中,在使用構(gòu)造方法創(chuàng)建Series對象時(shí)候,index參數(shù)接收了一個(gè)嵌套列表來設(shè)置索引的層級,其中,嵌套的第一個(gè)列表會(huì)作為外層索引,而嵌套的第二個(gè)列表會(huì)作為內(nèi)層索引。
(2)創(chuàng)建具有兩層索引結(jié)構(gòu)的DataFrame對象,具體代碼如下。
In [66]: import pandas as pd from pandas import DataFrame, Series # 占地面積為增加的列索引 mulitindex_df = DataFrame({ ‘占地面積’ :[15848, 13472, 12073.8, 7813, 7446, 6444, 15230, 8269]}, index=[['河北省','河北省','河北省','河北省', '河南省','河南省','河南省','河南省'], ['石家莊市','唐山市','邯鄲市','秦皇島市', '鄭州市','開封市','洛陽市','新鄉(xiāng)市']]) mulitindex_df Out[66]: 占地面積 河北省 石家莊市 15848.0 唐山市 13472.0 邯鄲市 12073.8 秦皇島市 7813.0 河南省 鄭州市 7446.0 開封市 6444.0 洛陽市 15230.0 新鄉(xiāng)市 8269.0
使用DataFrame生成層次化索引的方式與Series生成層次化索引的方式大致相同,都是對參數(shù)index進(jìn)行設(shè)置。
需要注意的是,在創(chuàng)建層次化索引對象時(shí),嵌套函數(shù)中兩個(gè)列表的長度必須是保持一致的,否則將會(huì)出現(xiàn)ValueError錯(cuò)誤。
除了使用嵌套列表的方式構(gòu)造層次化索引以外,還可以通過MultiIndex類的方法構(gòu)建一個(gè)層次化索引。MultiIndex類提供了3種創(chuàng)建層次化索引的方法,具體如下:
◆MultiIndex.from_tuples():將元組列表轉(zhuǎn)換為MultiIndex。
◆MultiIndex.from_arrays():將數(shù)組列表轉(zhuǎn)換為MultiIndex。
◆MultiIndex.from_product():從多個(gè)集合的笛卡兒乘積中創(chuàng)建一個(gè)MultiIndex。
使用上面的任一種方法,都可以返回一個(gè)MultiIndex類對象。在MultiIndex類對象中有三個(gè)比較重要的屬性,分別是levels、labels和names,其中,levels表示每個(gè)級別的唯一標(biāo)簽,labels表示每一個(gè)索引列中每個(gè)元素在levels中對應(yīng)的第幾個(gè)元素,names可以設(shè)置索引等級名稱。