Python pandas和scipy中的偏斜和峰度函数有什么区别?

Python pandas和scipy中的偏斜和峰度函数有什么区别?,python,numpy,pandas,scipy,Python,Numpy,Pandas,Scipy,我决定比较pandas和scipy.stats中的偏斜函数和峰度函数,不明白为什么我在库之间得到不同的结果 从文档中我可以看出,这两个峰度函数都使用Fisher的定义进行计算,而对于skew,似乎没有足够的描述来说明它们的计算方式是否存在任何重大差异 import pandas as pd import scipy.stats.stats as st heights = np.array([1.46, 1.79, 2.01, 1.75, 1.56, 1.69, 1.88, 1.76, 1.88

我决定比较pandas和scipy.stats中的偏斜函数和峰度函数,不明白为什么我在库之间得到不同的结果

从文档中我可以看出,这两个峰度函数都使用Fisher的定义进行计算,而对于skew,似乎没有足够的描述来说明它们的计算方式是否存在任何重大差异

import pandas as pd
import scipy.stats.stats as st

heights = np.array([1.46, 1.79, 2.01, 1.75, 1.56, 1.69, 1.88, 1.76, 1.88, 1.78])

print "skewness:", st.skew(heights)
print "kurtosis:", st.kurtosis(heights)
这将返回:

skewness: -0.393524456473
kurtosis: -0.330672097724
skewness: 0   -0.466663
kurtosis: 0    0.379705
然而,如果我转换为熊猫数据帧:

heights_df = pd.DataFrame(heights)
print "skewness:", heights_df.skew()
print "kurtosis:", heights_df.kurtosis() 
这将返回:

skewness: -0.393524456473
kurtosis: -0.330672097724
skewness: 0   -0.466663
kurtosis: 0    0.379705

如果我把它贴错了地方,我会道歉;不确定这是统计还是编程问题。

差异是由于不同的规范化。默认情况下,Scipy不会更正偏差,而pandas会更正

您可以通过传递
bias=False
参数告诉scipy更正偏差:

>>> x = pandas.Series(np.random.randn(10))
>>> stats.skew(x)
-0.17644348972413657
>>> x.skew()
-0.20923623968879457
>>> stats.skew(x, bias=False)
-0.2092362396887948
>>> stats.kurtosis(x)
0.6362620964462327
>>> x.kurtosis()
2.0891062062174464
>>> stats.kurtosis(x, bias=False)
2.089106206217446
似乎没有办法告诉熊猫去除偏差校正