You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Pandas中Series.std()对相同数值的计算结果不一致?

这不是Pandas的Bug,是浮点数精度问题

核心原因

0.19这个十进制小数无法被二进制浮点数精确存储,实际在内存中是一个接近0.19的近似值。当计算样本标准差(Pandas的std()默认使用ddof=1,即除以n-1)时:

  • 2个元素:两个近似值的差异极小,计算后结果被舍入为0;
  • 3个元素:浮点数的累积误差在计算过程中未被完全抵消,导致出现一个极小的非零值(本质是浮点数噪声);
  • 4个元素:误差再次被抵消或舍入,结果回到0。

验证方法

如果使用精确小数类型存储数值,就能得到理论上的0:

import pandas as pd
from decimal import Decimal

s = pd.Series([Decimal('0.19')] * 3)
print(s.std())  # 输出0

补充说明

样本标准差的计算公式为:$\sqrt{\frac{\sum_{i=1}^n (x_i - \bar{x})2}{n-1}}$。当所有$x_i$理论相等时,分子应为0,但浮点数的近似存储导致$\sum_{i=1}n (x_i - \bar{x})^2$是一个极小的正数,最终开根得到非零结果。

内容的提问来源于stack exchange,提问作者Václav Bočan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:32:02