Pandas 中浮点索引的目的是什么?

bob*_*obo 9 python floating-point pandas

s.index=[0.0,1.1,2.2,3.3,4.4,5.5]
s.index
# Float64Index([0.0, 1.1, 2.2, 3.3, 4.4, 5.5], dtype='float64')
s
# 0.0    141.125
# 1.1    142.250
# 2.2    143.375
# 3.3    143.375
# 4.4    144.500
# 5.5    145.125
s.index=s.index.astype('float32')
# s.index
# Float64Index([              0.0, 1.100000023841858, 2.200000047683716,
#               3.299999952316284, 4.400000095367432,               5.5],
#              dtype='float64')
Run Code Online (Sandbox Code Playgroud)

浮点指数背后的直觉是什么?努力理解何时使用它们而不是 int 索引(似乎您可以拥有三种类型的索引:int64、float64 或 object,例如s.index=['a','b','c','d','e','f'])。

从上面的代码中,看起来 Pandas 真的希望浮点数索引是 64 位的,因为这些 64 位浮点数被转换为 32 位浮点数,然后返回到 64 位浮点数,dtype索引的剩余'float64'.

人们如何使用浮动指数?

是否认为您可能对数据进行了一些统计计算并希望对其结果进行排名,但这些结果可能是浮点数?并且我们要强制float64避免丢失分辨率?

cs9*_*s95 8

由于一般的浮点限制浮点索引对于基于标签的索引通常是无用的。当然,pd.Float64IndexAPI 中是否存在完整性,但这并不总是意味着您应该使用它。Jeff(核心库贡献者)在github上有这样的说法:

[...] 很少需要实际使用浮点索引;使用列通常会更好地为您服务。索引的目的是使单个元素更快,例如 df[1.0],但这非常棘手;这就是对此有问题的原因。

棘手的部分1.0 == 1.0并不总是正确的,这取决于您如何1.0以位表示。

浮动指数在少数情况下很有用(如 github 问题中所引用),主要用于记录时间轴(时间),或在例如天文数据中的极其微小/精确的测量。对于大多数其他情况,有pd.cutpd.qcut用于对数据进行分箱,因为处理分类数据通常比处理连续数据更容易。