熊猫与numpy的不同std

Man*_*gia 26 python precision numpy pandas

大熊猫和numpy之间的标准偏差不同.为什么和哪一个是正确的?(相对差异是3.5%,这不应该来自四舍五入,这在我看来很高).

import numpy as np
import pandas as pd
from StringIO import StringIO

a='''0.057411
0.024367
 0.021247
-0.001809
-0.010874
-0.035845
0.001663
0.043282
0.004433
-0.007242
0.029294
0.023699
0.049654
0.034422
-0.005380'''


df = pd.read_csv(StringIO(a.strip()), delim_whitespace=True, header=None)

df.std()==np.std(df) # False
df.std() # 0.025801
np.std(df) # 0.024926

(0.024926 - 0.025801) / 0.024926 # 3.5% relative difference
Run Code Online (Sandbox Code Playgroud)

我使用这些版本:

熊猫:'0.14.0'numpy:'1.8.1'

NPE*_*NPE 37

简而言之,两者都不是"不正确".Pandas使用无偏估计(N-1在分母中),而Numpy默认不使用.

为了使它们表现相同,传递ddof=1numpy.std().

有关进一步讨论,请参阅

  • 作为记录,考虑互换使用`df.std()`和`np.std(ddof = 1)`的人们还应该意识到两者之间的另一个区别:如果有任何区别,`np.std`返回`nan`。缺失值,而`df.std`返回非缺失值的标准偏差。如果您想忽略nans,请使用`np.nanstd()`。 (2认同)

Xua*_*uan 9

对于pandas的执行与 相同numpy,可以传入ddof=0参数,因此df.std(ddof=0)

这段简短的视频很好地解释了为什么n-1样品可能是首选。https://www.youtube.com/watch?v=Cn0skMJ2F3c