gpt4 book ai didi

python - 为什么 Pandas 和 Numpy 对与 NaN 的成对相关产生不同的结果?

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:54 25 4
gpt4 key购买 nike

我正在尝试为我正在构建的模型创建一个成对相关表,并且我的数据集中有一些 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?)谢谢

最佳答案

NumPy 的默认行为是传播 NaN。也就是说,它对整个数组执行计算,每次将某些内容添加到 NaN(或乘以等)时,结果都是 NaN。这是合理的:如果 a = 5 且 b = NaN,则 a + b 应该是 NaN。因此,包含至少一个 NaN 的数组的方差为 NaN,该数组与任何其他数组的相关性也是如此。

pandas 面向原始数据的特性导致了不同的设计决策:它试图从不完整的数据中提取尽可能多的信息。特别是,corr 方法(和 documented)被设计为排除 NaN。

要在 NumPy 中重现 pandas 行为,请使用如下所示的 bool 掩码 valid:它要求列中没有 NaN 值。

dataset = np.array([[1, 2, 3, 4, np.nan], [1, 0, np.nan, 8, 9]])

valid = ~np.isnan(dataset).any(axis=0)
numpy_corr = np.corrcoef(dataset[:, valid])

pandas_data = pd.DataFrame(dataset.transpose())
pandas_corr = pandas_data.corr()

两种关联方法现在返回相同的结果:

  [[ 1.        ,  0.90112711],
[ 0.90112711, 1. ]])

对角线元素表示数组与其自身的相关性,它始终为 1(理论上;实际上它在机器精度内为 1)。

关于python - 为什么 Pandas 和 Numpy 对与 NaN 的成对相关产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35933201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com