当我在 Pandas 中使用 df.corr 时,我的一些列丢失了

Hee*_*ean 9 python correlation pandas

这是我的代码:


import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = pd.read_csv('death_regression2.csv')
data3 = data.replace(r'\s+', np.nan, regex = True)  


plt.figure(figsize=(90,90)) 
corr = data3.corr()

print(np.shape(list(corr)))
print(np.shape(data3))
Run Code Online (Sandbox Code Playgroud)

(135,) (4909, 204)

所以在我使用相关函数之前,参数的总数是 204(列数),但是在使用 data3.corr() 之后,一些参数丢失了,减少到 135。

如何检查数据中所有列之间的相关性?

FCh*_*Chm 8

没有看到任何额外的数据来理解为什么你缺少列,我们将不得不检查是什么pd.DataFrame.corr

正如文档概述的那样,它计算列的成对相关性。因为您没有指定参数,所以使用默认方法并计算Pearson's r,它测量两个变量 (X, Y) 之间的线性相关性,并且可以取 -1 和 1 之间的值,对应于精确的负线性相关性到精确的正线性相关性以及介于两者之间的所有值,0 表示没有相关性(即 X 对 Y 的图是随机的,线性回归将拟合平坦斜率)。

对于非数值变量,没有相关性的概念(至少在 Pearson 的 r 和这个答案的上下文中),pd.DataFrame.corr只是忽略非数值(即非浮点或非整数值)并删除这些列,解释了原因你有更少的列。

如果您删除的值实际上是数字但存储(例如)为字符串,您可能需要在调用.corr().

举个例子:

x = np.random.rand(10)
y = np.random.rand(10)
x_scaled = x*6 
cat = ['one', 'two', 'three', 'four', 'five', 
       'six','seven', 'eight', 'nine', 'ten']

df = pd.DataFrame({'x':x, 'y':y, 'x_s':x_scaled, 'cat':cat})

df.corr()
Run Code Online (Sandbox Code Playgroud)

返回:

        x            y          x_s
 x   1.000000    -0.470699    1.000000
 y  -0.470699     1.000000   -0.470699
x_s  1.000000    -0.470699    1.000000
Run Code Online (Sandbox Code Playgroud)

这是我们的相关矩阵,但我们的非数字列 ( cat) 已被删除。

如果您将不同的数值变量相互绘制出来,则会得到以下图:

pearsons_r_example

这有助于突出不同的相关性:偶然地,x和之间存在负线性相关性y

  • 非常感谢!就像你提到的,某些缺失列上的数字具有对象的格式。使用 df.convert_objects(convert_numeric = True) 将其更改为数字后,我可以计算出所有相关系数!谢谢你的热心回答! (4认同)