pandas 的 Index 物件負責保存軸的標籤 (包括 DataFrame 的欄名) 與其他詮釋資料 (例如軸名)。
當建構 Series 或是 DataFrame 時,所使用的任何標籤陣列或其他序列在內部都會被轉成 Index:
In [84]: obj = pd.Series(np.arange(3), index=["a", "b", "c"])
In [85]: index = obj.index
In [86]: index
Out[86]: Index(['a', 'b', 'c'], dtype='object')
In [87]: index[1:]
Out[87]" Index(['b', 'c'], dtype='object')
Index 物件是不可變的,所以無法被使用者修改:
index[1] = "d" # TypeError
「不可變」的特性可使不同的資料結構更安全的共用 Index 物件:
In [88]: labels = pd.Index(np.arange(3))
In [89]: labels
Out[89]: Int64Index([0, 1, 2], dtype='int64')
In [90]: obj2 = pd.Series([1.5, -2.5, 0], index=labels)
In [91]: obj2
Out[91]:
0 1.5
1 -2.5
2 0.0
dtype: float64
In [92]: obj2.index is labels
Out[92]: True
除了像陣列之外,Index 的行為也很像固定大小的集合 (set):
In [93]: frame3
Out[93]:
state Ohio Nevada
2000 1.5 NaN
2001 1.7 2.4
2002 3.6 2.9
In [94]: frame3.columns
Out[94]: Index(['Ohio', 'Nevada'], dtype='object', name='state')
In [95]: "Ohio" in frame3.columns
Out[95]: True
In [96]: 2003 in frame3.index
Out[96]: False
與 Python 的集合不同的是,pandas 的 Index 可能有重複的標籤:
In [97]: pd.Index(["foo", "foo", "bar", "bar"])
Out[97]: Index(['foo', 'foo', 'bar', 'bar'], dtype='object')
用重複的標籤來進行選擇,會選出該標籤的所有實例。
以下為較常用的方法與屬性
append()
: 串接其他的 Index 物件,產生新的 Index。difference()
: 計算集合差作為 Index。intersection()
: 計算集合交集。union()
: 計算聯集。isin()
: 計算布林陣列,指出各個值有沒有在傳入的集合裡。delete()
: 將位於 Index i 的元素刪除並計算新的 Index。drop()
: 將傳入的值刪除並計算新的 Index。insert()
: 在 Index i 插入元素並計算新的 Index。is_monotonic
: 每個元素都大於或等於前一個元素就回傳 True
。is_unique
: Index 沒有重複值就回傳 True
。unique()
: 計算包含 Index 裡不同值的陣列。今日的分享就到這囉,我們明天見,掰掰!