如何用熊猫四舍五入获得小数"true"位精度?



我缺少什么?我尝试将.round(3)附加到api调用的末尾,但它不起作用,而且在单独的调用中也不起作用。所有列的数据类型均为numpy.float32

>>> summary_data = api._get_data(units=list(units.id),
downsample=downsample,
table='summary_tb',
db=db).astype(np.float32)
>>> summary_data.head()

id  asset_id    cycle   hs      alt     Mach        TRA         T2
0   10.0    1.0     1.0     1.0     3081.0  0.37945     70.399887   522.302124
1   20.0    1.0     1.0     1.0     3153.0  0.38449     70.575668   522.428162
2   30.0    1.0     1.0     1.0     3229.0  0.39079     70.575668   522.645020
3   40.0    1.0     1.0     1.0     3305.0  0.39438     70.575668   522.651184
4   50.0    1.0     1.0     1.0     3393.0  0.39690     70.663559   522.530090
>>> summary_data = summary_data.round(3)
>>> summary_data.head()
id  asset_id    cycle   hs      alt     Mach    TRA         T2
0   10.0    1.0     1.0     1.0     3081.0  0.379   70.400002   522.302002
1   20.0    1.0     1.0     1.0     3153.0  0.384   70.575996   522.427979
2   30.0    1.0     1.0     1.0     3229.0  0.391   70.575996   522.645020
3   40.0    1.0     1.0     1.0     3305.0  0.394   70.575996   522.651001
4   50.0    1.0     1.0     1.0     3393.0  0.397   70.664001   522.530029

>>> print(type(summary_data))
pandas.core.frame.DataFrame
>>> print([type(summary_data[col][0]) for col in summary_data.columns])
[numpy.float32,
numpy.float32,
numpy.float32,
numpy.float32,
numpy.float32,
numpy.float32,
numpy.float32,
numpy.float32]

事实上,看起来确实发生了某种形式的舍入,但奇怪的事情正在发生。提前谢谢。

编辑

这样做的目的是使用32位浮点数,而不是64位。此后,我使用了pd.set_option('precision', 3),但根据文档,这只会影响显示,而不会影响基本值。正如下面的评论中所提到的,我正在努力将原子操作的数量降到最低。70.575996与70.57600的计算成本更高,这就是我试图解决的问题。提前谢谢。

嗯,这可能是一个浮点问题。您可以将数据类型更改为float,而不是np.float32:

>>> summary_data.astype(float).round(3)
id  asset_id  cycle   hs     alt   Mach     TRA       T2
0  10.0       1.0    1.0  1.0  3081.0  0.379  70.400  522.302
1  20.0       1.0    1.0  1.0  3153.0  0.384  70.576  522.428
2  30.0       1.0    1.0  1.0  3229.0  0.391  70.576  522.645
3  40.0       1.0    1.0  1.0  3305.0  0.394  70.576  522.651
4  50.0       1.0    1.0  1.0  3393.0  0.397  70.664  522.530

如果您随后将其更改回np.float32,它将重新显示问题:

>>> summary_data.astype(float).round(3).astype(np.float32)
id  asset_id  cycle   hs     alt   Mach        TRA          T2
0  10.0       1.0    1.0  1.0  3081.0  0.379  70.400002  522.302002
1  20.0       1.0    1.0  1.0  3153.0  0.384  70.575996  522.427979
2  30.0       1.0    1.0  1.0  3229.0  0.391  70.575996  522.645020
3  40.0       1.0    1.0  1.0  3305.0  0.394  70.575996  522.651001
4  50.0       1.0    1.0  1.0  3393.0  0.397  70.664001  522.530029

相关内容

  • 没有找到相关文章

最新更新