使用 dtype float64 创建 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

这个问题与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 格式会返回更大的差异。

最新更新