.corr 如何删除 NA 和 null 值?

Raf*_*a V 6 python pandas

我是熊猫/蟒蛇的新手。我想知道函数 .corr 在计算相关性时如何删除具有多个变量的数据帧的空数据。

例如,假设我有以下数据框:

  #  'A1'  'A2' 'A3'
  1   4     3    1
  2   2     5    NA
  3   3     2    NA
  4   NA    10   2
Run Code Online (Sandbox Code Playgroud)

1)它是否删除了至少有一个 NA/null 值的整行?(在这种情况下,只考虑第一行来计算相关矩阵)

或者

2)它是否计算成对相关,只排除单个值?(例如,对于“A1”和“A2”之间的相关性,它计算第 1、2 和 3 行;对于“A1”和“A3”之间的相关性,它计算第 1 行和第 4 行。)

我在函数 .corr 文档中没有找到这样的信息。它只说它删除了空值。对不起,如果这是一个愚蠢的问题。我很乐意了解在哪里可以找到有关函数的此类详细信息。

cal*_*ini 6

如果成对相关NaN在其中一个观察中有价值,熊猫将忽略它。我们可以通过删除这些值并检查结果来验证这一点。

df

Out[8]: 
    A1  A2   A3
0  4.0   3  1.0
1  2.0   5  NaN
2  3.0   2  NaN
3  NaN  10  2.0
Run Code Online (Sandbox Code Playgroud)

相关结果如下:

df.corr()

Out[9]: 
          A1        A2   A3
A1  1.000000 -0.654654  NaN
A2 -0.654654  1.000000  1.0
A3       NaN  1.000000  1.0
Run Code Online (Sandbox Code Playgroud)

现在,如果我们删除NaNfrom 列,A1我们可以检查结果是否相同:

df[pd.isnull(df['A1'])==False].corr()

Out[10]: 
          A1        A2  A3
A1  1.000000 -0.654654 NaN
A2 -0.654654  1.000000 NaN
A3       NaN       NaN NaN
Run Code Online (Sandbox Code Playgroud)

与 A3 类似:

df[pd.isnull(df['A3'])==False].corr()

    A1   A2   A3
A1 NaN  NaN  NaN
A2 NaN  1.0  1.0
A3 NaN  1.0  1.0
Run Code Online (Sandbox Code Playgroud)

编辑

只是为了补充一点答案,并参考这个答案,您可以看到熊猫会忽略NaN计算中的值,而 numpynp.corrcoef不会:

np.corrcoef(df.values)

Out[12]: 
array([[ 1., nan, nan, nan],
       [nan, nan, nan, nan],
       [nan, nan, nan, nan],
       [nan, nan, nan, nan]])
Run Code Online (Sandbox Code Playgroud)