內部#
此部分將提供深入了解 pandas 內部的一些資訊。它主要是針對 pandas 本身的開發人員。
索引#
在 pandas 中,實作了一些物件可以用作軸標籤的有效容器
Index
:一般「已排序集合」物件,一個假設其內容為物件資料型別的 ndarray。標籤必須是可雜湊(且可能不可變)且唯一的。在 Cython 中建立一個標籤到位置的字典,以執行O(1)
查詢。MultiIndex
:標準階層式索引物件DatetimeIndex
:一個具有Timestamp
方框元素的 Index 物件(實作是 int64 值)TimedeltaIndex
:一個具有Timedelta
方框元素的 Index 物件(實作是 in64 值)PeriodIndex
:一個具有 Period 元素的 Index 物件
有一些函式可以輕鬆建立一般索引
date_range()
:從時間規則或 DateOffset 產生固定頻率的日期範圍。一個 Python datetime 物件的 ndarrayperiod_range()
:由時間規則或 DateOffset 產生的固定頻率日期範圍。一個Period
物件的 ndarray,代表時間跨度
警告
自訂 Index
子類別不受支援,應改用 ExtensionArray
介面實作自訂行為。
MultiIndex#
在內部,MultiIndex
包含幾項內容:層級、整數代碼和層級名稱
In [1]: index = pd.MultiIndex.from_product(
...: [range(3), ["one", "two"]], names=["first", "second"]
...: )
...:
In [2]: index
Out[2]:
MultiIndex([(0, 'one'),
(0, 'two'),
(1, 'one'),
(1, 'two'),
(2, 'one'),
(2, 'two')],
names=['first', 'second'])
In [3]: index.levels
Out[3]: FrozenList([[0, 1, 2], ['one', 'two']])
In [4]: index.codes
Out[4]: FrozenList([[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])
In [5]: index.names
Out[5]: FrozenList(['first', 'second'])
您可能猜得到,代碼決定在索引的每個層級中,哪個唯一元素會識別為該位置。重要的是要注意,已排序的狀態僅由整數代碼決定,且不會檢查(或關心)層級本身是否已排序。很幸運地,建構函式 from_tuples()
和 from_arrays()
確保為真,但如果您自行計算層級和代碼,請務必小心。
值#
pandas 使用自訂類型(例如 Categorical
或帶有時區的日期時間)來延伸 NumPy 的類型系統,因此我們有多種「值」的概念。對於 1D 容器(Index
類別和 Series
)我們有以下慣例
cls._values
指的是「最佳」陣列。這可以是ndarray
或ExtensionArray
。
因此,例如 Series[category]._values
是 Categorical
。
建立 pandas 資料結構的子類別#
此區段已移至 建立 pandas 資料結構的子類別。