Pandas 層次化索引
1. 前言
上一節我們學習了字符串的一些操作函數,對于字符串數據的分析有一定的幫助,有利于我們在數據值上的處理和分析。在這之前我們接觸到的數據集的索引都是單個層次,行索引或者列索引,除此之外,Pandas 庫中的數據集還存在層次化的索引,極大的提升了數據集所能表現的數據維度,下面將詳細學習 Pandas 庫中的層次化索引知識。
2. 什么是層次化索引
層次化索引是 Pandas 的一個重要功能,是指在一個軸上有至少兩個級別的索引值,層次化索引的好處是我們可以方便的使用低緯度索引形式去表示高緯度的數據,下面我們看一下層次化索引的具體數據表現:
# 1. 構造了一個 Series 數據集
obj=pd.Series([12,23,34,45],index=[["a","a","b","b"],[1,2,3,4]])
print(obj)
# --- 輸出結果 ---
a 1 12
2 23
b 3 34
4 45
# 結果解析:可以看到這里和我們第5小節講到的 Series 有點不一樣的地方,在他的索引列前面還有一列,值為 'a','b' 這也是索引,有兩層索引,因此之前的二維數據結構 Series 通過層次化的索引,就可以表示3維的數據集。
# 2. 構造了一個 DataFrame 數據集
df1=pd.DataFrame([[96,92,83,94],[85,86,77,88],[69,90,91,82],[83,84,85,86],[83,84,85,86],[83,84,85,86]],index=[['2018年','2018年','2018年','2019年','2019年','2019年'],['語文','數學','英語','語文','數學','英語']],columns=[['上學期','上學期','下學期','下學期'],['期中考試','期末考試','期中考試','期末考試']])
print(df1)
# --- 輸出結果 ---
上學期 下學期
期中考試 期末考試 期中考試 期末考試
2018年 語文 96 92 83 94
數學 85 86 77 88
英語 69 90 91 82
2019年 語文 83 84 85 86
數學 83 84 85 86
英語 83 84 85 86
# 結果解析:這里我們構造了一個 DataFrame 數據集,在行索引和列索引我們均設置了層次化的索引,這樣能更加有效的表示高緯度的數據。
3. 層次化索引數據的選取
對于 Pandas 庫數據集具有多層索引值,我們可以對一級索引通過 loc () 函數獲取數據子集:
# df1 原數據集,是上面我們自己創建的具有兩層列索引和兩層行索引的數據集
print(df1.loc['2018年','上學期'])
# --- 輸出結果 ---
期中考試 期末考試
語文 96 92
數學 85 86
英語 69 90
# 結果解析:我們通過 loc() 函數傳入行和列的一級索引,可以看到得到了一個 DataFrame 數據子集
print(df1.loc[:,'上學期'])
# --- 輸出結果 ---
期中考試 期末考試
2018年 語文 96 92
數學 85 86
英語 69 90
2019年 語文 83 84
數學 83 84
英語 83 84
# 結果解析:這里我們獲取了列索引中的上學期的子集,可以看到輸出結果中行索引還是兩級索引
4. 小結
本節課程我們主要學習了 Pandas 庫中的層次化索引,利用數據集的層次化索引,我們可以表示更高維度的數據集,用于處理更復雜的數據。本節課程的重點如下:
- 了解 Pandas 層次化索引在數據集中的具體表現形式;
- 掌握 Pandas 層次化索引中數據子集的獲取方式。