熊猫方差和标准差结果与手动计算不同

时间:2018-10-04 08:23:16

标签: python pandas statistics standard-deviation variance

我正在尝试使用熊猫查找均值,方差和SD。但是,人工计算与熊猫输出不同。使用熊猫我有什么想念的吗?附上xl屏幕截图以供参考Mean=394, Variance21704, SD=147.32

import pandas as pd

dg_df = pd.DataFrame(
            data=[600,470,170,430,300],
            index=['a','b','c','d','e'])

print(dg_df.mean(axis=0)) # 394.0 matches with manual calculation
print(dg_df.var())        # 27130.0 not matching with manual calculation 21704
print(dg_df.std(axis=0))  # 164.71187 not matching with manual calculation 147.32

3 个答案:

答案 0 :(得分:1)

DataFrame.varDataFrame.std中将默认参数ddof=1(自由度增量)更改为0,参数axis=0是默认值,因此应为省略:

print(dg_df.mean())
0    394.0
dtype: float64

print(dg_df.var(ddof=0))  
0    21704.0
dtype: float64

print(dg_df.std(ddof=0))
0    147.322775
dtype: float64

答案 1 :(得分:1)

标准偏差的定义不只一种。您正在计算等效的Excel STDEV.P,其描述如下:“根据整个人口 ...计算标准差”。如果您需要Excel中的样本标准差,请使用STDEV.S

pd.DataFrame.std默认情况下假设1个自由度,也称为样本标准偏差。

numpy.std默认情况下假定0 自由度,也称为人口标准差。

请参阅Bessel's correction,以了解样本与总体之间的区别。

您还可以通过熊猫ddof=0 / std方法指定var

dg_df.std(ddof=0)
dg_df.var(ddof=0)

答案 2 :(得分:1)

您还可以使用dg_df.describe(),然后使用下一个数据帧。也许更直观

count   5.00000
mean    394.00000
std 164.71187
min 170.00000
25% 300.00000
50% 430.00000
75% 470.00000
max 600.00000

您可以获得正确的数据,例如dg_df.describe().loc['count']