关于python:Pandas df.astype(‘float32’)失去了很多精度

Pandas df.astype('float32') loses a lot of precision

为什么Pandas.DataFrame中的float64123456789.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


本质上,float32numpydtype。之所以在将float64转换为float32时在精度上看到一些差异,是因为无法使用float32准确地表示123456789.0,这是32位dtype(1个符号位,8位指数,23位尾数)。

通常,float32占用的内存是float64表示数值的一半,但是与float64相比,float32表示的数字精度较低。

请注意,没有解决方法。如果需要表示无法使用32位dtype(例如float32)表示的特定数字,请使用精度更高的dtype(float64)。