内部机制#

本节将深入探讨 pandas 的一些内部机制。它主要面向 pandas 开发人员。

索引#

在 pandas 中,有几个对象可充当轴标签的有效容器:

  • Index 通用的“有序集”对象,一个 object dtyped的 ndarray,对其内容不做任何假设。标签必须是可哈希(且很可能是不可变的)和唯一的。在 Cython 中填充一个标签到位置的字典以实现 O(1) 查找。

  • MultiIndex 标准的分层索引对象

  • DatetimeIndex 一个 Timestamp 包装元素的 Index 对象(内部是 int64 值)

  • TimedeltaIndex 一个 Timedelta 包装元素的 Index 对象(内部是 int64 值)

  • PeriodIndex 一个 Period 元素的 Index 对象

有一些函数可以轻松创建常规索引:

  • date_range() 由时间规则或 DateOffset 生成的固定频率日期范围。一个 Python datetime 对象的 ndarray

  • period_range() 由时间规则或 DateOffset 生成的固定频率日期范围。一个 Period 对象的 ndarray,表示时间段

警告

不支持自定义 Index 子类,应使用 ExtensionArray 接口来实现自定义行为。

MultiIndex#

在内部,MultiIndex 由几个部分组成:**levels**(级别)、整数 **codes**(编码)和 level **names**(名称):

您可能可以猜到,编码决定了在索引的每一层中,哪个唯一元素与该位置标识。重要的是要注意,排序是**仅**由整数编码决定的,并且不检查(或关心)级别本身是否已排序。幸运的是,构造函数 from_tuples()from_arrays() 确保了这一点,但如果您自己计算级别和编码,请务必小心。

Values#

pandas 使用自定义类型扩展了 NumPy 的类型系统,例如 Categorical 或带有时区的日期时间,因此我们对“values”有多种概念。对于一维容器(Index 类和 Series),我们有以下约定:

  • cls._values 指的是“最佳可能”的数组。这可能是一个 ndarrayExtensionArray

因此,例如,Series[category]._values 是一个 Categorical

子类化 pandas 数据结构#

本节已移至 子类化 pandas 数据结构