【问题标题】:Different std in pandas vs numpypandas 与 numpy 的不同标准
【发布时间】:2014-09-18 23:41:56
【问题描述】:

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

我使用这些版本:

pandas '0.14.0'
numpy '1.8.1'

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    简而言之,两者都不是“不正确的”。 Pandas 使用unbiased estimator(分母为N-1),而 Numpy 默认不使用。

    要使它们的行为相同,请将ddof=1 传递给numpy.std()

    如需进一步讨论,请参阅

    【讨论】:

    • 是的,事实上 df.std()==np.std(df, ddof=1) 是真的!因此,现在的问题变成了哪个估算器更好:-),开个玩笑……
    • 为了记录,考虑交替使用df.std()np.std(ddof=1) 的人还应该注意两者之间的另一个区别:np.std 如果有任何缺失值,则返回nan 而@987654333 @ 返回非缺失值的标准差。如果您想忽略 nans,请使用 np.nanstd()
    • 这意味着 df.std != df.values.std() 我根本没想到。这似乎很令人困惑。
    【解决方案2】:

    要使pandasnumpy 执行相同,可以传入ddof=0 参数,因此df.std(ddof=0)

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

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 2022-11-01
      • 2021-05-05
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      相关资源
      最近更新 更多