我正在尝试使用熊猫查找均值,方差和SD。但是,人工计算与熊猫输出不同。使用熊猫我有什么想念的吗?附上xl屏幕截图以供参考
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
答案 0 :(得分:1)
在DataFrame.var
和DataFrame.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']