Pandas标准差奇迹

4

这是我的代码:

import pandas as pd
df = pd.DataFrame({'Test': [861166021755746, 861166021755746, 861166021755746]})
print(df.describe())

这是输出结果(请注意std的值):
Test
count  3.000000e+00
mean   8.611660e+14
std    1.186328e+07
min    8.611660e+14
25%    8.611660e+14
50%    8.611660e+14
75%    8.611660e+14
max    8.611660e+14

正确的std值为零,因为这三个数字相同。

现在,我拿出上面的数据框,并用数字9替换第一个数字8。

df = pd.DataFrame({'Test': [961166021755746, 961166021755746, 961166021755746]})
print(df.describe())

现在的输出结果是(请注意标准号码):
Test
count  3.000000e+00
mean   9.611660e+14
std    0.000000e+00
min    9.611660e+14
25%    9.611660e+14
50%    9.611660e+14
75%    9.611660e+14
max    9.611660e+14

我找到了一个神奇的数字,或者发生了什么事情?

我认为这可能与这个问题相同?https://github.com/pydata/pandas/issues/10242 我会使用numpy std。请注意,您的数字大致接近双精度数字尾数的最大精度。 - JohnE
从那个问题开始,如果你安装了 bottleneck 它也会解决它。 - chrisb
"bottleneck" 是 numpy 库。据我了解,numpy 已经正确地计算了所有内容。我不明白 "bottleneck" 如何修复 pandas 的问题?" - user1700890
2
“瓶颈”是一个可选的依赖项,如果安装了它,“pandas”将使用它来加速 - 在这种情况下,它还使用了一个不具有相同稳定性问题的不同“var”算法。请参见- http://pandas.pydata.org/pandas-docs/stable/install.html#recommended-dependencies - chrisb
1个回答

1
这个问题实际上是与方差计算有关的错误,已在版本0.17.0中解决。如果您使用之前的任何版本,则应将其更新为新版本,或按照评论中建议在您的环境中安装bottleneck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接