Numpy浮动存储到Dataframe似乎被错误地管理了

时间:2016-07-08 14:58:41

标签: python numpy pandas floating-point precision

我刚用这个数据帧来测试统计算法:

d1=pd.DataFrame([[0.1,0.2],[0.3,0.4],[0.5,0.6],[0.7,0.8],[0.9,0.81],[0.91,0.82],[0.93,0.94],[0.95,0.96],[0.97,0.98],[0.99,1]])

回顾到:

  • d1.iloc[0,1]收益0.20000000000000001
  • d1.iloc[2,1]收益0.59999999999999998

执行

 d1=pd.DataFrame([[0.1,0.2],[0.3,0.4],[0.5,0.6],[0.7,0.8],[0.9,0.81],[0.91,0.82],[0.93,0.94],[0.95,0.96],[0.97,0.98],[0.99,1]]).astype(np.float)

   d1=pd.DataFrame([[0.1,0.2],[0.3,0.4],[0.5,0.6],[0.7,0.8],[0.9,0.81],[0.91,0.82],[0.93,0.94],[0.95,0.96],[0.97,0.98],[0.99,1]], dtype=np.float)

不会改变结果

另一方面,b=np.float(0.2)c=np.float(0.6)在调用时会给出正确的值。

我是否遗漏了一些东西,或者熊猫中的数据管理确实存在问题?这对我来说非常重要,因为我需要精确的数据。

由于

1 个答案:

答案 0 :(得分:1)

使用np.array而不是pandas,比较一个元素的显示:

x=np.array([[0.1,0.2],[0.3,0.4],[0.5,0.6],[0.7,0.8],[0.9,0.81],[0.91,0.82],[0.93,0.94],[0.95,0.96],[0.97,0.98],[0.99,1]])

x[0,1]
Out[47]: 0.20000000000000001

float(x[0,1])
Out[48]: 0.2

np.float(x[0,1])   # np.float32
Out[49]: 0.2

np.float64(x[0,1])
Out[50]: 0.20000000000000001

当显示完整的64时,我们看到最后关闭了非零值,但是我们不会使用短32类型。

这与沃伦在评论中提供的信息相同。