内部结构# 本节将介绍 pandas 的一些内部结构。它主要面向 pandas 本身的开发人员。 索引# 在 pandas 中,实现了一些可以用作轴标签的有效容器的对象: Index:通用的“有序集”对象,一个对象数据类型的 ndarray,不假设其内容。标签必须是可散列的(并且可能是不可变的)并且是唯一的。将标签字典填充到 Cython 中的位置以进行O(1)查找。 MultiIndex:标准层次索引对象 DatetimeIndex:带有装箱元素的 Index 对象Timestamp(impl 是 int64 值) TimedeltaIndex:带有装箱元素的 Index 对象Timedelta(impl 是 in64 值) PeriodIndex: 带有Period元素的Index对象 有一些函数可以使创建常规索引变得容易: date_range():从时间规则或 DateOffset 生成的固定频率日期范围。 Python 日期时间对象的 ndarray period_range():从时间规则或 DateOffset 生成的固定频率日期范围。对象的 ndarray Period,表示时间跨度 警告 Index不支持自定义子类,应使用ExtensionArray接口来实现自定义行为。 多重索引# 在内部,它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 使用自定义类型(例如带有时区的日期时间)扩展了 NumPy 的类型系统Categorical,因此我们有多种“值”概念。对于一维容器(Index类 和Series),我们有以下约定: cls._values引用是“最好的可能”数组。这可能是一个 ndarray或ExtensionArray。 因此,例如,Series[category]._values是一个Categorical. 子类化 pandas 数据结构# 本节已移至子类化 pandas 数据结构。