【问题标题】:How to subtract two columns when floating point precision matters当浮点精度很重要时如何减去两列
【发布时间】:2020-10-10 04:23:22
【问题描述】:

我试图减去数据框中的两列,但它对所有值都给出了相同的结果?

这是我的数据:

        a           b   
0   0.35805     -0.01315
1   0.35809     -0.01311
2   0.35820     -0.01300
3   0.35852     -0.01268

我尝试了here 中建议的方法,但它在所有行中都为我重复了相同的结果。

【问题讨论】:

  • 你的预期输出是什么
  • @Wen-Ben 它应该是 0.35805 - (-0.01315) = 0.3712,但问题似乎是熊猫正在四舍五入我的数据。但实际数据为 0.3580500019359589 - (-0.01315)。如何解决舍入问题?
  • 您是如何将数据输入pandas 的?从文件或其他东西? @Upriser
  • @Erfan 来自 csv 文件。
  • @Upriser,如果所有列差异都相同是一个问题,我想问题在于如何计算ab。就目前而言,正确的减法结果是一列相同的值,都是0.3712

标签: python pandas dataframe


【解决方案1】:

更像是一个精度问题,我总是使用decimal

from decimal import *
df.z.map(Decimal)-df.dist.map(Decimal)
Out[189]: 
0    0.3711999999999999796246319406
1    0.3712000000000000195232718880
2    0.3712000000000000177885484121
3    0.3712000000000000056454840802
dtype: object

【讨论】:

  • 实际上很奇怪,在 pandas 中没有解决方案。
  • @Upriser,请确保 CSV 中令人难以置信的高精度是真实存在的,而不仅仅是浮点运算的虚假结果。例如,我认为坚持 0.35805 - 0.01315 = 0.3711999999999999796246319406 是没有意义的。
【解决方案2】:

我认为这会很好用

df['a-b'] = df['a']-df['b']

【讨论】:

  • 我尝试过这种方法,但没有奏效。 Wen-Ben 在上述解决方案中建议的方法适用于更高的精度值。这种方法适用于较低的精度和整数,但对于更高的精度,它对我来说失败了。
猜你喜欢
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多