首頁(yè)常見問題正文

一起認(rèn)識(shí)層次化索引【Pandas相關(guān)知識(shí)】

更新時(shí)間:2023-01-29 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  前面所涉及的Pandas對(duì)象都只有一層索引結(jié)構(gòu)(行索引、列索引),又稱為單層索引,層次化索引可以理解為單層索引的延伸,即在一個(gè)軸方向上具有多層索引。

  對(duì)于兩層索引結(jié)構(gòu)來說,它可以分為內(nèi)層索引和外層索引。以某些省市的面積表格為例,我們來認(rèn)識(shí)一下什么是層次化索引,具體如圖3-6所示。

1674977702873_層次化索引圖示.jpg

  圖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對(duì)象,具體如下:

  (1)創(chuàng)建具有兩層索引結(jié)構(gòu)的Series對(duì)象,具體代碼如下。

   In [65]: import numpy as np
         import pandas as pd
         mulitindex_series = pd.Series([15848,13472,12073.8,
            7813,7446,6444,15230,8269],
              index=[['河北省','河北省','河北省','河北省',
                      '河南省','河南省','河南省','河南省'],
                     ['石家莊市','唐山市','邯鄲市','秦皇島市',
                      '鄭州市','開封市','洛陽(yáng)市','新鄉(xiāng)市']])
         mulitindex_series
Out[65]:
河北省 石家莊市       15848.0
        唐山市       13472.0
        邯鄲市       12073.8
      秦皇島市         7813.0
河南省   鄭州市         7446.0
        開封市         6444.0
        洛陽(yáng)市        15230.0
        新鄉(xiāng)市         8269.0

  上述示例中,在使用構(gòu)造方法創(chuàng)建Series對(duì)象時(shí)候,index參數(shù)接收了一個(gè)嵌套列表來設(shè)置索引的層級(jí),其中,嵌套的第一個(gè)列表會(huì)作為外層索引,而嵌套的第二個(gè)列表會(huì)作為內(nèi)層索引。

  (2)創(chuàng)建具有兩層索引結(jié)構(gòu)的DataFrame對(duì)象,具體代碼如下。

   In [66]: import pandas as pd
         from pandas import DataFrame, Series
         # 占地面積為增加的列索引
         mulitindex_df = DataFrame({ ‘占地面積’ :[15848, 13472, 12073.8,
                                     7813, 7446, 6444, 15230, 8269]},
                         index=[['河北省','河北省','河北省','河北省',
                                 '河南省','河南省','河南省','河南省'],
                                ['石家莊市','唐山市','邯鄲市','秦皇島市',
                                 '鄭州市','開封市','洛陽(yáng)市','新鄉(xiāng)市']])
         mulitindex_df
Out[66]:
                    占地面積
河北省      石家莊市  15848.0
           唐山市    13472.0
           邯鄲市    12073.8
          秦皇島市    7813.0
河南省       鄭州市    7446.0
            開封市    6444.0
            洛陽(yáng)市   15230.0
            新鄉(xiāng)市    8269.0

  使用DataFrame生成層次化索引的方式與Series生成層次化索引的方式大致相同,都是對(duì)參數(shù)index進(jìn)行設(shè)置。

  需要注意的是,在創(chuàng)建層次化索引對(duì)象時(shí),嵌套函數(shù)中兩個(gè)列表的長(zhǎng)度必須是保持一致的,否則將會(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類對(duì)象。在MultiIndex類對(duì)象中有三個(gè)比較重要的屬性,分別是levels、labels和names,其中,levels表示每個(gè)級(jí)別的唯一標(biāo)簽,labels表示每一個(gè)索引列中每個(gè)元素在levels中對(duì)應(yīng)的第幾個(gè)元素,names可以設(shè)置索引等級(jí)名稱。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!