我有一些代码,不明白为什么应用 np.std 会产生两种不同的结果。
import numpy as np
import pandas as pd
a = np.array([ 1.5, 6. , 7. , 4.5])
print 'mean value is:', a.mean()
print 'standard deviation is:', np.std(a)
下一行基本上应该只在 pandas 数据框中做同样的事情
base = datetime.datetime(2000, 1, 1)
arr = np.array([base + datetime.timedelta(days=i) for i in xrange(4)])
index_date = pd.Index(arr, name = 'dates')
data_gas = pd.DataFrame(a, index_date, columns=['value'], dtype=float)
mean_pandas = data_gas.resample('M').mean()
standard_deviation = data_gas.resample('M').apply(np.std)
print mean_pandas
print standard_deviation
从 np.std 的文档中我可以读到:“...默认 ddof
为零。” (ddof=delta 自由度)。
np.std(a)
提供标准偏差,其中除数为 N(=值的数量),...resample('M').apply(np.std )
提供标准偏差,其中除数为 N 减 1。是什么导致了这种差异?
最佳答案
默认情况下,numpy 使用总体标准差,正如您所注意到的,它有一个除数 N
,其中 N
是值的数量。如果您有完整的数据集,就会使用它。
pandas 版本正在计算样本标准偏差。它有一个 N-1
的除数,当您有来自较大集合的数据子集时使用。这可以通过 np.std(a, ddof=1)
在 numpy 中实现。
例如,如果您想衡量您所在城市鞋码的标准差,则可以使用样本标准差。测量每个人的尺码是不可行的,因此您使用的样本是从街上的人那里测量的 100 个鞋码。在这种情况下,您正在使用您的(希望是随机的)数据样本来为更大的集合建模。在大多数情况下,我会说样本标准偏差就是您想要的。
如果您不想将结果推广到整个城市,而是只想找出这个 100 个尺寸样本的标准差,您可以使用总体标准差。
关于python - 在 pandas 和 standalone 中使用时的不同结果 np.std(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42535702/