我刚用这个数据帧来测试统计算法:
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)
在调用时会给出正确的值。
我是否遗漏了一些东西,或者熊猫中的数据管理确实存在问题?这对我来说非常重要,因为我需要精确的数据。
由于
答案 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类型。
这与沃伦在评论中提供的信息相同。