Index對象負責管理軸標簽、軸名稱等元數據,是一個不可修改的、有序的、可以索引的ndarry對象。在構建Sereis或DataFrame時,所用到的任何數據或者array-like的標簽,都會轉換為一個Index對象。Index對象是一個從索引到數據值的映射,當數據是一列時,Index是列索引;當數據是一行數據時,Index是行索引。
一,基礎函數
用於創建索引的最基礎的構造函數:
pandas.Index(data,dtype=object,name)
參數注釋:
- data:類似於一維數組的對象
- dtype:用於設置索引元素的類型,默認值是object
- name:索引的名稱,默認值是Index
舉個例子,創建一個整數索引:
>>> pd.Index([1, 2, 3]) Int64Index([1, 2, 3], dtype='int64')
索引是一個ndarray對象,元素的類型相同,每一個Index對象,常用的屬性有:
- values:索引的值
- array:以數組形式返回索引元素的值
- dtype:索引元素的數據類型
- name:索引的名稱屬性
- shape:索引的形狀
二,索引的轉換
索引是一個ndarray對象,不僅元素類型可以轉換,其對象本身也可以強轉為其他like-array類型,比如list、Series和DataFrame。
1,強轉索引值的類型
顯式把索引元素的類型強制轉換成其他數據類型:
Index.astype(self, dtype, copy=True)
2,把索引轉換成list
list是由索引的值構成的:
Index.to_list(self)
3,把索引轉換成Series
Series的索引值和數據值相同,是由原索引的數據值構成的:
Index.to_series(self, index=None, name=None)
參數index 表示新建Sereis的索引,默認值是None,表示新建Sereis的索引就是原索引。
>>> idx = pd.Index(['Ant', 'Bear', 'Cow'], name='animal') >>> idx.to_series() animal Ant Ant Bear Bear Cow Cow Name: animal, dtype: object
4,把索引轉換成DataFrame
創建一個新的DataFrame對象,列的值是由索引值構成的,默認情況下,新DataFrame的索引就是原索引:
Index.to_frame(self, index=True, name=None)
參數index表示是否把原索引作為新創建的DataFrame對象的索引,默認值是True。
>>> idx = pd.Index(['Ant', 'Bear', 'Cow'], name='animal') >>> idx.to_frame() animal animal Ant Ant Bear Bear Cow Cow
5,把索引展開為ndarray對象
該方法和numpy.ravel() 相同,把Index對象展開為一維的ndarray對象:
Index.ravel(self, order='C')
三,索引的排序
按照索引的值進行排序,但是返回索引值的下標,參數 *args和 **kwargs都是傳遞給numpy.ndarray.argsort函數的參數。
Index.argsort(self, *args, **kwargs)
按照索引的值進行排序,返回排序的副本,參數return_indexer 表示是否返回索引值的下標:
Index.sort_values(self, return_indexer=False, ascending=True)
舉個例子,有如下索引:
>>> idx = pd.Index(['b', 'a', 'd', 'c']) Index(['b', 'a', 'd', 'c'], dtype='object')
按照索引值進行排序,返回排序索引的下標:
>>> order = idx.argsort() >>> order array([1, 0, 3, 2])
通過下標來查看索引的排序值:
>>> idx[order] Index(['a', 'b', 'c', 'd'], dtype='object')
當然,也可以直接返回已排序的索引:
>>> idx.sort_values() Index(['a', 'b', 'c', 'd'], dtype='object')
如果要返回已排序的索引和對應的下標,需要設置參數return_indexer=True:
>>> idx.sort_values(return_indexer=True) (Index(['a', 'b', 'c', 'd'], dtype='object'), array([1, 0, 3, 2], dtype=int64))
參考文檔: