首页 > 解决方案 > python - 具有 RangeIndex 与 Int64Index 的数据帧 - 为什么?

问题描述

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

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

# remove rows with DMT, no lumninance data
df_new = df_new[df_new.Person != 'DMT']

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

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. 使用具有两种不同类型索引的数据帧之间的关键或重要区别是什么?(RangeIndex & Int64Index)

    类型(df_val.index)

    pandas.core.indexes.range.RangeIndex

    类型(df_new.index)

    pandas.core.indexes.numeric.Int64Index

标签: pythonindexing

解决方案


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

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


推荐阅读