在Pandas中使用df.corr时,我的某些列会丢失

时间:2019-03-04 09:41:15

标签: python pandas correlation

这是我的代码:


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))

(135,) (4909,204)

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

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

1 个答案:

答案 0 :(得分:0)

在没有看到任何其他数据来了解为什么缺少列的情况下,我们将不得不检查pd.DataFrame.corr的作用。

根据documentation的概述,它计算列的成对相关。由于您没有指定任何参数,因此使用默认方法并计算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()

返回:

        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

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

如果相互绘制不同的数字变量,则会得到以下图形:

pearsons_r_example

这有助于突出显示不同的相关性:偶然地,xy之间存在负线性相关。