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

标签 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

所以,我的问题是,为什么修改了最后一位?

提前致谢!

编辑:我知道它与数据类型有关。但为什么要特别对最后一位数字 +1 呢?如果我改用 10212764634169926,什么也没有发生,结果保持为 10212764634169926。与 10212764634169928 相同,它返回 10212764634169928

最佳答案

这个问题与 pandas 本身无关,而是与 float 数字本身有关。如果您尝试以下操作:

float(10212764634169927)
1.0212764634169928e+16

您可以了解 float 是如何存储在内存中的(通过指数表示法)(见最后一位小数)。为了更深入地了解这个问题,我测试了以下内容:

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 格式会返回更多差异。

关于python - 使用 dtype float64 创建 pandas dataframe 更改其条目的最后一位数字(相当大的数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851930/

相关文章:

python - 如何从DataFrame的rank方法中获取整数而不是 float

Python,将 9 个元组 UTC 日期转换为 MySQL 日期时间格式

python - 数据框:将一行复制到另一行,同时保留不同的列数据类型

python - 将列向量转换为多列矩阵

python - 防止 pandas.DataFrame.loc 进行类型转换

python - pandas 稀疏数据帧 value_counts 不起作用

python - 修改 pandas 数据框中的 datetimeindex 中的小时

python - Pandas:将格式选项传递给函数

python - 将 SymPy 矩阵转换为 numpy 数组/矩阵的最佳方法是什么

Python数据类型: What does '|S...' Mean?