在相同的 pandas 数据上运行相同的脚本会生成略有不同的 DataFrame 浮点值

Running the same script on the same pandas data produces very slightly different dataframes floating-point values

提问人:Georgios Sarantitis 提问时间:1/27/2022 最后编辑:smciGeorgios Sarantitis 更新时间:1/27/2022 访问量:233

问:

我正在执行我之前在相同数据上运行过的脚本。我得到的数据帧与前一个数据帧仅略有不同(在小数点后第 10 位左右)。例如:

  • 在某一列(和行)中,旧 DataFrame 包含价格 5673391.88。
  • 在新数据帧的同一列和同一行中,该值似乎完全相同 (5673391.88)。
  • 但是,如果我减去这两列,我会得到 -9.445123e-10 的差异。

当然,整个列都是这种情况,而不仅仅是特定行。这怎么可能?请注意,我无法确认两个脚本运行之间的相同环境(pandas 或 Python 版本)。会不会是这两个原因之一?别的?

python pandas csv 浮点 精度

评论

0赞 smci 1/27/2022
告诉我们大概的 pandas 和 Python 版本,或者至少是安装日期。特别是当您报告此类问题时。
0赞 smci 1/27/2022
此外,我在您的标题中添加了“pandas”和“floating-point”。原来的标题措辞非常模糊。它可能是一千个包裹中的任何一个。
1赞 JeffUK 1/27/2022
你如何将它们相互减去?上次运行旧脚本时,旧脚本的数据存储在哪里?你是如何检索它的,等等,可能是四舍五入变得不稳定的任何步骤!
0赞 smci 1/27/2022
相似/相同的问题:Pandas 浮点精度 - 看似相同的数字显示为不相等
0赞 Georgios Sarantitis 1/28/2022
@smci Python 应该不会有太大的不同,也许根本没有,就像 3.6 和 3.7 一样。但是对于熊猫,我真的不确定,第一个可能是 0.25,第二个可能是 >1.2.0。所以,考虑到下面的答案,这确实可能是问题所在,对吧?有趣。。。

答:

1赞 Fareed Khan 1/27/2022 #1

一个可能的原因:Pandas 1.2.02020 年 12 月 26 日发布,他们强调了这个问题

更改 read_csv 和 read_table 的默认浮动精度

read_csv() 和 read_table() 方法相对于精度的最后一位,读取浮点数可能会略有错误。

在此之前,此版本始终可用,以避免此问题。floating_precision="high"

但是,在此版本中,现在的默认设置是使精度更加精确。它不会对性能产生任何影响。floating_precision=None

评论

2赞 Georgios Sarantitis 1/28/2022
不幸的是,这在我的情况下不起作用。因此,我阅读了新生成的 DataFrame,其中 floating_precision = 'High' 或 'legacy' 或 'round_trip',但并不缺乏。准确地说,当使用“高”时,我得到了完全相同的结果,当我使用其他两个时,我得到了更多的不同列。现在,我将尝试通过使用较旧的 Pandas 版本运行生成数据帧的所有管道来重现数据帧。将更新线程。
0赞 smci 1/28/2022
Georgios 请尝试制作一些可重复的例子 (MCVE) 并发布它,否则没有人可以复制您的轶事结果。此外,请在脚本中自动记录 pandas、Python、numpy 以及管道中可能影响此问题的所有其他包的版本。为了可重复性,请注意不断更新包。使用虚拟环境并行使用多个版本。