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计算结果为准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值