內部#

此部分將提供深入了解 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 物件的 ndarray

  • period_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 指的是「最佳」陣列。這可以是 ndarrayExtensionArray

因此,例如 Series[category]._valuesCategorical

建立 pandas 資料結構的子類別#

此區段已移至 建立 pandas 資料結構的子類別