使用dtype float64创建pandas数据框会更改其条目的最后一位数(相当大的数字)

时间:2017-05-08 15:45:52

标签: python pandas numpy data-science

我试图创建一个像下面这样的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

1 个答案:

答案 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格式会带来更多差异。