python - 具有 RangeIndex 与 Int64Index 的数据帧 - 为什么?

Reb*_*kah 7 python indexing

编辑:我刚刚在代码中发现一行将我的 df 从 RangeIndex 更改为数字 Int64Index。这是如何以及为何发生的?

在此行之前,我的所有 df 都是 RangeIndex 类型。在这行代码之后 df_new 更改为 Int64Index 类型,它是范围索引而不是数字索引。

# remove rows with DMT, no lumninance data
df_new = df_new[df_new.Person != 'DMT']
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释以下内容吗?

Int64Index 和 RangeIndex

"警告 0.18.0 中澄清了基于整数的浮点数索引的索引,有关更改的摘要,请参阅此处。Int64Index 是 pandas 中的基本索引。这是一个实现有序、可切片集的不可变数组。在0.18.0之前,Int64Index将为所有NDFrame对象提供默认索引。RangeIndex是0.18.0版本中添加的Int64Index的子类,现在为所有NDFrame对象提供默认索引。RangeIndex是Int64Index的优化版本可以表示单调有序集。这些类似于 Python 范围类型。 ” [来自https://pandas.pydata.org/pandas-docs/stable/advanced.html#int64index-and-rangeindex]

  1. 为什么索引类型从 RangeIndex 变为 Int64Index?
  2. 使用两种不同类型索引的数据帧之间的关键或重要区别是什么?(范围索引和 Int64 索引)

    类型(df_val.index)

    pandas.core.indexes.range.RangeIndex

    类型(df_new.index)

    pandas.core.indexes.numeric.Int64Index

小智 0

回答#1:RangeIndex 仅存储索引的开始、停止和步长值,而不是整个序列。这要求索引值等距。当您删除某些行时,它会在序列中引入间隙,因此必须将索引转换为存储所有值的类型。

关于#2:文档指出,RangeIndex 在某些情况下可以比 Int64Index 提高计算速度。很明显,RangeIndex 可以节省内存,但我不确定在什么情况下它也会减少 CPU 时间。