我试图创建一个像下面这样的pandas数据框
import pandas as pd
import numpy as np
pd.set_option('precision', 20)
a = pd.DataFrame([10212764634169927, 10212764634169927, 10212764634169927], columns=['counts'], dtype=np.float64)
a 返回为:
counts
0 10212764634169928.0
1 10212764634169928.0
2 10212764634169928.0
所以,我的问题是,为什么最后一位数字被修改了?
提前致谢!
编辑:我知道它与dtype有关。但为什么+1到最后一位数字?如果我改用10212764634169926,没有任何反应,结果保持为10212764634169926.同样是10212764634169928,它返回10212764634169928答案 0 :(得分:4)
该问题与pandas
本身无关,而与float
号本身无关。如果您尝试以下操作:
float(10212764634169927)
1.0212764634169928e+16
你可以知道浮点数如何存储在内存中(通过指数表示法)(参见最后一个小数)。为了更深入地了解这个问题,我测试了以下内容:
a.astype('float64')
counts
0 10212764634169928.0
1 10212764634169928.0
2 10212764634169928.0
a.astype('float32')
counts
0 10212764362473472.0
1 10212764362473472.0
2 10212764362473472.0
您可以看到使用float32
格式会带来更多差异。