二、 内部数据结构
Index
的结构如图所示(实线为普通属性,虚线为property
属性或者getset_descriptor
):.name
为普通属性,返回Index
的名字.values/._values
为property
属性,返回Index
的内部数据的视图._data
为普通属性,返回Index
的内部数据.shape
为property
属性,返回内部数据的形状._engine
为标签映射管理器,它负责管理label
和下标之间的映射ObjectEngine
对象使用一个哈希表对象PyObjectHashTable
对象(由ObjectEngine
对象的.mmaping
属性给出,该属性是一个getset_descriptor
)将标签映射到其对应的整数下标的。
MultiIndex
的结构如图所示.name
为普通属性,返回MultiIndex
的名字。同Index
.values/._values
为property
属性,返回MultiIndex
的内部数据的视图。同Index
._data
为None
,这里是与Index
不同。
.shape
为property
属性,返回内部属性的形状 。同Index
._engine
为标签映射管理器,它负责管理label
和下标之间的映射。同Index
.labels
为property
属性,它返回一个FrozenList
(不可变列表),列表中存储每一级的label
对应的下标(也就是创建MultiIndex
时传入的labels
参数),以FrozenNDArray
的数据类型。.levels
为property
属性,它返回一个FrozenList
(不可变列表),列表中存储每一级的label
(也就是创建MultiIndex
时传入的levels
参数),以Index
的数据类型。
Seris
的结构如图所示(实线为普通属性,虚线为property
属性或者getset_descriptor
):._name
为普通属性,返回Seris
的名字;.name
为property
属性,返回的也是Seris
名字.dtype/.dtypes
为property
属性,返回Series
的数据类型。.ftype/ftypes
为property
属性,返回一个字符串,说明Series
是否稀疏数据。(二者返回的字符串的值相同,但不是同一个字符串对象).values/._values
为property
属性,返回Series
的内部数据的视图.index
为普通属性,返回Series
的索引.shape
为property
属性,返回Series
的数据的形状._data
为普通属性,它返回的是一个SingleBlockManager
对象,该对象负责管理内部数据。SingleBlockManager
的.shape
属性为property
属性,返回内部数据的形状SingleBlockManager
的.blocks
属性为普通属性,返回一个列表,该列表只有一个元素,该元素为一个IntBlock
对象(或者其他的xxxBlock
对象),代表了内部数据。IntBlock
的.values
属性为普通属性,它返回内部数据:一个ndarray
。IntBlock
的.shape
属性为property
属性,它返回内部数据的形状
DataFrame
的结构如图所示(实线为普通属性,虚线为property
属性或者getset_descriptor
):.index/columns
属性都为普通属性,它们返回的都是一个Index
对象,参考Series
。.dtypes
属性为property
属性,给出了每列的数值类型。它返回的是一个Series
。并且没有.dtype
属性,这一点与Series
不同。.ftypes
属性为property
属性,给出了每列是否为sparse/dense
的。它返回的是一个Series
。并且没有.ftype
属性,这一点与Series
不同。.values/._values/.shape
属性都为property
属性,参考Series
。._data
属性为普通属性,它返回的是一个BlockManager
对象,该对象负责管理内部数据。该对象的.block
属性(普通属性)返回一个列表,该列表里面有多个元素。DataFrame
尽量用一个数组保存类型相同的列。每个元素都为一个
xxBlock
对象。如IntBlock/FloatBlock...
- 一个
xxBlock
可能存储多个列的数据(这些列的数据都是同一个类型)
- 一个
xxBlock
对象的.values
属性(普通属性)就是存储的某个列(或者某些类型相同的列)的内部数据,一个ndarray
xxBlock
对象的.shape
属性(property
属性)就是存储的某个列(或者某些类型相同的列)的内部数据的形状.blocks
属性为property
属性。该属性返回一个字典,该字典的键为不同的数值类型,该字典的值为该数值类型的数值组成的DataFrame