为何Pandas与Numpy计算标准差的结果不一致?
Pandas与Numpy标准差计算差异的原因解释
嗨,这个问题其实挺常见的,核心原因就是Pandas和Numpy计算标准差时默认使用的自由度参数不同!
咱们拿你给出的例子拆解一下:1到7的均值是4,先算每个数与均值差的平方和:(1-4)²+(2-4)²+(3-4)²+(4-4)²+(5-4)²+(6-4)²+(7-4)² = 9+4+1+0+1+4+9 = 28。
为什么Numpy的结果是2.0?
np.std()默认计算的是总体标准差,也就是将平方和除以数据点的总数n(这里n=7):28÷7=4,开平方后就是2.0,这正是你说的正确总体标准差。
为什么Pandas的结果是≈2.16?
df["vals"].std()默认计算的是样本标准差,这时候会将平方和除以n-1(也就是7-1=6):28÷6≈4.6667,开平方后就得到≈2.1602。样本标准差通常用于从样本估计总体的标准差,除以n-1是为了修正偏差,让估计结果更准确。
怎么让两者结果一致?
如果你想让Pandas输出总体标准差,只需要设置参数ddof=0:
df["vals"].std(ddof=0) # 结果为2.0
如果你想让Numpy输出样本标准差,设置参数ddof=1:
np.std([1,2,3,4,5,6,7], ddof=1) # 结果≈2.1602
内容的提问来源于stack exchange,提问作者Ala Głowacka
相关产品推荐
相关产品推荐

