python - 在 pandas 和 standalone 中使用时的不同结果 np.std()

标签 python pandas numpy standard-deviation

我有一些代码,不明白为什么应用 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/

相关文章:

python - 如何将此词典列表转换为表格或 csv 文件?

python - CherryPy 后台任务

Python 和从列表创建 2d numpy 数组

python - 在 numpy 中 reshape 时如何保持特定维度不变?

python - 如何在Python中对许多彩色图像进行直方图均衡?

python - 类型错误 : 'str' object is not callable?

python - 使用 odo 加载 CSV -> AWS 上的 postgres

python - Pandas 在 groupby 中设置值

python - 重复 B 列中的值,直到 python 中的 A 列发生变化

python - 如何创建一个中心和角落为 1 的 numpy 数组