【发布时间】:2021-12-04 23:24:01
【问题描述】:
我错过了什么?我尝试将.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),但根据documentation,这只会影响显示,但不会影响基础值。正如下面的评论中提到的,我试图最小化原子操作的数量。 70.575996 与 70.57600 的计算成本更高,这是我要解决的问题。提前致谢。
【问题讨论】:
标签: python pandas numpy rounding