二、 内部数据结构

  1. Index的结构如图所示(实线为普通属性,虚线为property属性或者getset_descriptor): Index

    • .name为普通属性,返回Index的名字 Index_name
    • .values/._valuesproperty属性,返回Index的内部数据的视图
    • ._data为普通属性,返回Index的内部数据 Index_data1 Index_data2 Index_data3 Index_data4
    • .shapeproperty属性,返回内部数据的形状 Index_shape
    • ._engine为标签映射管理器,它负责管理label和下标之间的映射 Index_engine
    • ObjectEngine对象使用一个哈希表对象PyObjectHashTable对象(由ObjectEngine对象的.mmaping属性给出,该属性是一个getset_descriptor)将标签映射到其对应的整数下标的。 Engine_mapping
  2. MultiIndex的结构如图所示 MultiIndex

    • .name为普通属性,返回MultiIndex的名字。同Index

    • .values/._valuesproperty属性,返回MultiIndex的内部数据的视图。同Index

      ._dataNone,这里是与Index不同。

    MultiIndex_pre MultiIndex_data

    • .shapeproperty属性,返回内部属性的形状 。同Index
    • ._engine为标签映射管理器,它负责管理label和下标之间的映射。同Index
    • .labelsproperty属性,它返回一个FrozenList(不可变列表),列表中存储每一级的label对应的下标(也就是创建MultiIndex时传入的labels参数),以FrozenNDArray的数据类型。 MultiIndex_labels
    • .levelsproperty属性,它返回一个FrozenList(不可变列表),列表中存储每一级的label(也就是创建MultiIndex时传入的levels参数),以Index的数据类型。 MultiIndex_levels
  3. Seris的结构如图所示(实线为普通属性,虚线为property属性或者getset_descriptor): Series

    • ._name为普通属性,返回Seris的名字;.nameproperty属性,返回的也是Seris名字 Series_name1 Series_name2
    • .dtype/.dtypesproperty属性,返回Series的数据类型。 Series_dtype1 Series_dtype2
    • .ftype/ftypesproperty属性,返回一个字符串,说明Series是否稀疏数据。(二者返回的字符串的值相同,但不是同一个字符串对象) Series_ftype1 Series_ftype2
    • .values/._valuesproperty属性,返回Series的内部数据的视图 Series_values1 Series_values2
    • .index为普通属性,返回Series的索引 Series_index
    • .shapeproperty属性,返回Series的数据的形状 Series_shape
    • ._data为普通属性,它返回的是一个SingleBlockManager对象,该对象负责管理内部数据。 Series_data
    • SingleBlockManager.shape属性为property属性,返回内部数据的形状 SingleBlockManager_shape
    • SingleBlockManager.blocks属性为普通属性,返回一个列表,该列表只有一个元素,该元素为一个IntBlock对象(或者其他的xxxBlock对象),代表了内部数据。 SingleBlockManager_blocks
    • IntBlock.values属性为普通属性,它返回内部数据:一个ndarrayIntBlock_values
    • IntBlock.shape属性为property属性,它返回内部数据的形状 IntBlock_shape
  4. DataFrame的结构如图所示(实线为普通属性,虚线为property属性或者getset_descriptor):
    DataFrame

    • .index/columns属性都为普通属性,它们返回的都是一个Index对象,参考SeriesDataFrame_index_columns

    • .dtypes属性为property属性,给出了每列的数值类型。它返回的是一个Series。并且没有.dtype属性,这一点与Series不同。 DataFrame_dtypes

    • .ftypes属性为property属性,给出了每列是否为sparse/dense的。它返回的是一个Series。并且没有.ftype属性,这一点与Series不同。 DataFrame_ftypes

    • .values/._values/.shape属性都为property属性,参考SeriesDataFrame_values_shape

    • ._data属性为普通属性,它返回的是一个BlockManager对象,该对象负责管理内部数据。该对象的.block属性(普通属性)返回一个列表,该列表里面有多个元素。 DataFrame尽量用一个数组保存类型相同的列。

    • 每个元素都为一个xxBlock对象。如IntBlock/FloatBlock...

      • 一个xxBlock 可能存储多个列的数据(这些列的数据都是同一个类型)
    • xxBlock对象的.values属性(普通属性)就是存储的某个列(或者某些类型相同的列)的内部数据,一个ndarray

    • xxBlock对象的.shape属性(property属性)就是存储的某个列(或者某些类型相同的列)的内部数据的形状 DataFrame_data

    • .blocks属性为property属性。该属性返回一个字典,该字典的键为不同的数值类型,该字典的值为该数值类型的数值组成的DataFrame DataFrame_blocks