Pandas df.astype('float32') loses a lot of precision
为什么Pandas.DataFrame中的float64值123456789.0转换为123456792.0,仅保留7个有效数字?
1 2 3 4 5 6 7 8 9 10 11
| import pandas as pd
df = pd.DataFrame([123456789.0])
# 0
# 0 123456789.0
df = df.astype('float32')
# 0
# 0 123456792.0 |
- 转换为较低精度的浮点时,难道不希望您失去精度吗?
-
stackoverflow.com/questions/23770993/…
-
这只是规则
本质上,float32是numpy的dtype。之所以在将float64转换为float32时在精度上看到一些差异,是因为无法使用float32准确地表示123456789.0,这是32位dtype(1个符号位,8位指数,23位尾数)。
通常,float32占用的内存是float64表示数值的一半,但是与float64相比,float32表示的数字精度较低。
请注意,没有解决方法。如果需要表示无法使用32位dtype(例如float32)表示的特定数字,请使用精度更高的dtype(float64)。