【发布时间】:2016-03-11 05:50:53
【问题描述】:
我正在尝试为我正在构建的模型创建一个成对相关表,并且我的数据集中有一些 numpy.nan 值 (NAN)。出于某种原因,当我使用 np.corrcoef() 执行关联时,我得到的结果与使用 pd.df.corr() 不同:
例如:
dataset = np.array([[1,np.nan,np.nan,1,1],[1,np.nan,np.nan,3000,1]])
pandas_data = pd.DataFrame(dataset.transpose())
print np.corrcoef(dataset)
我得到的:
[[ nan nan]
[ nan nan]]
但是对于 pandas 数据框,我确实有一个结果:
print pandas_data.corr()
0 1
0 NaN NaN
1 NaN 1
他们处理 NaN 的方式是否存在根本差异,或者我错过了什么? (另外,如果我确实有不同的值,为什么我的相关性为 1?)谢谢
【问题讨论】:
-
我没有遇到过这个,但为什么不检查一下文档:
http://pandas.pydata.org/pandas-docs/stable/computation.html#computing-rolling-pairwise-covariances-and-correlationshttp://pandas.pydata.org/pandas-docs/stable/computation.html#computation-covariance-caveats -
在第一列使用不同的值。 [1,1,1] 的方差为零。或者查看协方差而不是相关系数(使用方差归一化为 1)。
-
谢谢@roadrunner66,它解释了pandas确实跳过了np.nan值,但是如果它本质上是一个带有numpy NaN的numpy数组,为什么不是numpy?
-
感谢@JohnE 对计算的澄清