编辑:
我刚刚在代码中找到一行,将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是熊猫的基本基本索引。这是实现有序可切片集合的不可变数组。在0.18.0之前,Int64Index将为所有NDFrame对象提供默认索引。
RangeIndex是在0.18.0版中添加的Int64Index的子类,现在为所有NDFrame对象提供默认索引。 RangeIndex是Int64Index的优化版本,可以表示单调有序集。这些类似于Python范围类型。” [from 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时间。