首頁技術文章正文

大數據培訓之數據重塑:重塑層次化索引

更新時間:2022-10-07 來源:黑馬程序員 瀏覽量:

IT培訓班

  在Pandas中,大多數據是以便于操作的DataFrame形式展現的,這樣可以很容易地獲取每行或每列的數據。不過有些時候,需要將DataFrame對象轉換為Series對象。為此,Pandas提供了數據重塑的一些功能,包括重塑層次化索引和軸向轉換,用于轉換一個表格或向量的結構,使其更便于進行下一步的分析。接下來,筆者先來介紹一下數據重塑的相關功能進行詳細地介紹。

  Pandas中重塑層次化索引的操作主要是stack()方法和unstack()方法,前者是將數據的列“旋轉”為行,后者是將數據的行“旋轉”為列。

  stack()方法可以將數據的列索引轉換為行索引,其語法格式如下:

DataFrame.stack(level=-1, dropna=True)

  上述方法中部分參數表示的含義如下:

  (1)level:表示操作內層索引。若設為0,表示操作外層索引,默認為-1。

  (2)dropna:表示是否將旋轉后的缺失值刪除,若設為True,則表示自動過濾缺失值,設置為False則相反。

  假設現在有一個DataFrame類對象df,它只有單層索引,如果希望將其重塑為一個具

  有兩層索引結構的對象result,也就是說將列索引轉換成內層行索引,則重塑前后的效果如圖4-22所示。

1665128463304_DataFrame對象重塑為Series對象.jpg

  圖4-22 DataFrame對象重塑為Series對象

  接下來,我們通過一個示例來演示如何使用stack()方法將df對象轉換成result,具體代碼如下:

In [33]: import pandas as pd
        df=pd.DataFrame({'A':['A0','A1','A2'],
                         'B':['B0','B1','B2']}
        # 將df進行重塑
        result=df.stack()
        result
Out[33]:
        0 A      A0
          B      B0
        1 A      A1
          B      B1
        2 A      A2
          B      B2

  上述代碼中,首先創(chuàng)建了一個DataFrame類的對象df,然后讓df對象調用stack()方法進行重塑,表明df對象的列索引會轉換成行索引。從輸出結果看出,result對象具有兩層行索引。

  使用type()函數來查看result的類型,代碼如下:

In [34]: type(result)
Out[34]: pandas.core.series.Series

  從輸出結果可以看出,DataFrame對象已經被轉換成一個Series對象。

  unstack()方法可以將數據的行索引轉換為列索引,其語法格式如下:

DataFrame.unstack(level=-1, fill_value=None)

  上述方法中部分參數表示的含義如下:

  (1)level:默認為-1,表示操作內層索引,0表示操作外層索引。

  (2)fill_value:若產生了缺失值,則可以設置這個參數用來替換NaN。

  接下來,將前面示例中重塑的Series對象“恢復原樣”,轉變成DataFrame對象,具體代碼如下:

In [35]: import pandas as pd
        df=pd.DataFrame({'A':['A0','A1','A2'],
                         'B':['B0','B1','B2']}
        res=df.stack()      # 將df重塑為Series對象
        res.unstack()       # 將Series對象轉換成df
Out[35]:
           A   B
        0  A0  B0
        1  A1  B1
        2  A2  B2

  上述示例中,首先創(chuàng)建了一個DataFrame類對象df,然后使用stack()方法將其重塑為Series類對象,最后再使用unstack()方法將其重塑回DataFrame類對象。

分享到:
在線咨詢 我要報名
和我們在線交談!