Pandas 和 Numpy的标准差计算结果不一样

Pandas 和 Numpy的标准差计算竟然不一样!


今天计算CV(变异系数),其定义如下:
C V = σ / μ . CV= σ/μ. CV=σ/μ.
其中σ是标准差, μ是均值。

用pandas来实现对df的CV计算,为了验证准确性,抽了一列用np.array.std()检验,发现二者计算结果竟然不一样!

#pandas
cur_res['mean']=df.mean().values
cur_res['std']=df.std().values
cur_res['cv']=df.std().values/array.mean().values
#pandas结果(单独拿了一行)
#mean 0.006429
#std  0.002504
#cv 0.389481


#numpy
a=np.array([0.0062,0.0059,0.0065,0.0081,0.0015,0.0073,0.0095])
a_std=a.std()
a_mean=a.mean()
a_cv=a.std()/a.mean()
#numpy结果
#mean 0.006429  
#std  0.002318 
#cv 0.36059

根据结果可见,mean计算一致,但std这里出现不一致,导致最后cv结果也不同。
经查,在默认情况下,

  • numpy计算的为总体标准偏差,ddof=0。
    使用场景为:拥有所有数据的情况下,计算所有数据的标准差时使用,即最终除以n,而非n-1。
  • pandas计算的为样本标准偏差,ddof=1。
    使用场景为:只有部分数据但需要求得总体的标准差时使用,当只有部分数据时,根据统计规律,除以n时计算的标准差往往偏小,因此需要除以n-1,即n-ddof。

需要根据实际数据情况来选择合适的函数。

在我的数据里,样本量偏少,仅是几次实验结果,并不是总体数据,而我想要得到总体分布的离散程度,则需要使用n-1的标准差计算方式。所以以pandas计算结果为准。

你可能感兴趣的:(python,python,pandas,numpy)