python - 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]
- 为什么索引类型从 RangeIndex 变为 Int64Index?
使用具有两种不同类型索引的数据帧之间的关键或重要区别是什么?(RangeIndex & Int64Index)
类型(df_val.index)
pandas.core.indexes.range.RangeIndex
类型(df_new.index)
pandas.core.indexes.numeric.Int64Index
解决方案
回答 #1: RangeIndex 仅存储索引的开始、停止和步长值,而不是整个序列。这要求索引值是等距的。当您删除一些行时,它会在序列中引入间隙,因此必须将索引转换为存储所有值的类型。
关于 #2:文档指出 RangeIndex 在某些情况下可能会比 Int64Index 提高计算速度。很明显 RangeIndex 可以节省内存,但我不确定在什么情况下它也会减少 CPU 时间。
推荐阅读
- sql - 两个一对多关系,其中“多”表是相同的
- amazon-web-services - 使用 DefaultAWSCredentialsProviderChain 从 AWS 密钥管理器获取密钥
- quarkus - Quarkus 迁移,休息端点测试问题 - TestInstantiationException 因为 IllegalArgumentException
- django - Django:FILE_UPLOAD_MAX_MEMORY 与 DATA_UPLOAD_MAX_MEMORY
- c++ - 无法从命名管道读取完整数据
- postgresql - 无法从 Google App Engine 上的 NestJS 项目访问 Google Cloud SQL 上的 PostgreSQL
- java - Openapi生成器maven插件可空属性问题
- c# - 使用 LINQ 声明的元组元素的名称
- c# - 使用 Html.GetEnumSelectList 时拆分枚举骆驼大小写
() - r - 重新编码离散变量