numpy var() 和 pandas var() 之间的区别

Ahm*_*nis 3 python statistics numpy pandas

我最近遇到一件事,让我注意到numpy.var()pandas.DataFrame.var()orpandas.Series.var()给出了不同的值。我想知道它们之间有什么区别吗?

这是我的数据集。


     Country    GDP     Area    Continent
0      India    2.79    3.287   Asia
1      USA     20.54    9.840   North America
2      China    13.61   9.590   Asia
Run Code Online (Sandbox Code Playgroud)

这是我的代码:


from sklearn.preprocessing import StandardScaler

ss = StandardScaler()

catDf.iloc[:,1:-1] = ss.fit_transform(catDf.iloc[:,1:-1])
Run Code Online (Sandbox Code Playgroud)

现在检查 Pandas 方差

# Pandas Variance
print(catDf.var())
print(catDf.iloc[:,1:-1].var())
print(catDf.iloc[:,1].var())
print(catDf.iloc[:,2].var())
Run Code Online (Sandbox Code Playgroud)

输出是

GDP     1.5
Area    1.5
dtype: float64
GDP     1.5
Area    1.5
dtype: float64
1.5000000000000002
1.5000000000000002
Run Code Online (Sandbox Code Playgroud)

而它应该是 1,因为我已经使用了 StandardScaler。

对于 numpy 方差

print(catDf.iloc[:,1:-1].values.var())
print(catDf.iloc[:,1].values.var())
print(catDf.iloc[:,2].values.var())
Run Code Online (Sandbox Code Playgroud)

输出是

1.0000000000000002
1.0000000000000002
1.0000000000000002
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的。

Dan*_*Dan 5

pandas 默认var为,numpy默认为。ddof10

var在 pandas 中得到的结果与在 numpy 中得到的结果相同

catDf.iloc[:,1:-1].var(ddof=0)
Run Code Online (Sandbox Code Playgroud)

这归结为总体方差和样本方差之间的差异。

请注意,sklearn标准缩放器明确提到他们使用 ddof 0,并且由于它不太可能影响模型性能(因为它只是用于缩放),因此他们没有将其公开为可配置参数。