目前看到的範例都有互不相同的軸標籤 (索引值),雖然有很多 pandas 函式如 reindex
都要求標籤互不相同,但並非強制規定,假如是一個具有重複索引的 Series:
In [258]: obj = pd.Series(np.arange(5), index=["a", "a", "b", "b", "c"])
In [259]: obj
Out[259]:
a 0
a 1
b 2
b 3
c 4
dtype: int64
索引的 is_unique
屬性可顯示標籤是否全都互不相同:
In [260]: obj.index.is_unique
Out[260]: False
當有重複的標籤時,選擇資料會產生不同的行為,檢索一個具有多個相同項目的標籤時會得到一個 Series,但是標籤只有一個項目時會得到一個純量值:
In [261]: obj["a"]
Out[261]:
a 0
a 1
dtype: int64
In [262]: obj["c"]
Out[262]: 4
這種情況有可能讓程式變得更複雜,因為進行檢索得到的輸出型態會根據標籤是否重複而有所不同。
同樣的邏輯也可以延伸到檢索 DataFrame 裡的列或欄:
In [263]: df = pd.DataFrame(np.random.standard_normal((5, 3)),
.....: index=["a", "a", "b", "b", "c"])
In [264]: df
Out[264]:
0 1 2
a 0.274992 0.228913 1.352917
a 0.886429 -2.001637 -0.371843
b 1.669025 -0.438570 -0.539741
b 0.476985 3.248944 -1.021228
c -0.577087 0.124121 0.302614
In [265]: df.loc["b"]
Out[265]:
0 1 2
b 1.669025 -0.438570 -0.539741
b 0.476985 3.248944 -1.021228
In [266]: df.loc["c"]
Out[266]:
0 -0.577087
1 0.124121
2 0.302614
Name: c, dtype: float64
今日的分享就到這囉,我們明天見,掰掰!