在 scipy/pandas 中用 Pearson 的 r 降低 'nan'
Dropping 'nan' with Pearson's r in scipy/pandas
小问题:有没有办法在 scipy 中将 'dropna' 与 Pearson 的 r 函数一起使用?我将它与 pandas 结合使用,但我的一些数据中存在漏洞。我知道您曾经可以在 older versions of scipy 中使用 Spearman 的 r 来抑制 'nan',但现在缺少该功能。
在我看来,这似乎是一种退化,所以我想知道我是否遗漏了一些明显的东西。
我的代码:
for i in range(len(frame3.columns)):
correlation.append(sp.pearsonr(frame3.iloc[ :,i], control['CONTROL']))
您可以这样使用 np.isnan
:
for i in range(len(frame3.columns)):
x, y = frame3.iloc[ :,i].values, control['CONTROL'].values
nas = np.logical_or(x.isnan(), y.isnan())
corr = sp.pearsonr(x[~nas], y[~nas])
correlation.append(corr)
您也可以尝试创建临时数据框,并使用 pandas 内置方法计算皮尔逊相关性,或者在使用 sp.pearsonr 之前在临时数据框中使用 .dropna 方法删除空值
for col in frame3.columns:
correlation.append(frame3[col].to_frame(name='3').join(control['CONTROL']).corr()['3']['CONTROL'])
小问题:有没有办法在 scipy 中将 'dropna' 与 Pearson 的 r 函数一起使用?我将它与 pandas 结合使用,但我的一些数据中存在漏洞。我知道您曾经可以在 older versions of scipy 中使用 Spearman 的 r 来抑制 'nan',但现在缺少该功能。
在我看来,这似乎是一种退化,所以我想知道我是否遗漏了一些明显的东西。
我的代码:
for i in range(len(frame3.columns)):
correlation.append(sp.pearsonr(frame3.iloc[ :,i], control['CONTROL']))
您可以这样使用 np.isnan
:
for i in range(len(frame3.columns)):
x, y = frame3.iloc[ :,i].values, control['CONTROL'].values
nas = np.logical_or(x.isnan(), y.isnan())
corr = sp.pearsonr(x[~nas], y[~nas])
correlation.append(corr)
您也可以尝试创建临时数据框,并使用 pandas 内置方法计算皮尔逊相关性,或者在使用 sp.pearsonr 之前在临时数据框中使用 .dropna 方法删除空值
for col in frame3.columns:
correlation.append(frame3[col].to_frame(name='3').join(control['CONTROL']).corr()['3']['CONTROL'])