Python 如果相关性大于0.75,则从数据帧中删除该列

Python 如果相关性大于0.75,则从数据帧中删除该列,python,r,pandas,machine-learning,scikit-learn,Python,R,Pandas,Machine Learning,Scikit Learn,我有一个数据帧名称data,我使用 corr = data.corr() 如果两列之间的corr大于0.75,请从数据帧data中删除其中一列。我尝试了一些选择 raw =corr[(corr.abs()>0.75) & (corr.abs() < 1.0)] raw=corr[(corr.abs()>0.75)和(corr.abs()

我有一个数据帧名称
data
,我使用

corr = data.corr()
如果两列之间的
corr
大于0.75,请从数据帧
data
中删除其中一列。我尝试了一些选择

raw =corr[(corr.abs()>0.75) & (corr.abs() < 1.0)]
raw=corr[(corr.abs()>0.75)和(corr.abs()<1.0)]
但这并没有帮助,我需要来自raw的列号,其值为非零。基本上是用一些python命令替换下面的R命令

{hc=findCorrelation(corr,cutoff = 0.75)

hc = sort(hc)

data <- data[,-c(hc)]}
{hc=findCorrelation(corr,cutoff=0.75)
hc=排序(hc)

数据使用
np.eye
忽略对角线值,并查找具有某个绝对值大于阈值的值的所有列。使用逻辑求反作为索引和列的掩码


你的例子

m = ~(corr.mask(np.eye(len(corr), dtype=bool)).abs() > 0.75).any()

raw = corr.loc[m, m]
np.random.seed([3,1415])
data = pd.DataFrame(
    np.random.randint(10, size=(10, 10)),
    columns=list('ABCDEFGHIJ'))
data

   A  B  C  D  E  F  G  H  I  J
0  0  2  7  3  8  7  0  6  8  6
1  0  2  0  4  9  7  3  2  4  3
2  3  6  7  7  4  5  3  7  5  9
3  8  7  6  4  7  6  2  6  6  5
4  2  8  7  5  8  4  7  6  1  5
5  2  8  2  4  7  6  9  4  2  4
6  6  3  8  3  9  8  0  4  3  0
7  4  1  5  8  6  0  8  7  4  6
8  3  5  8  5  1  5  1  4  3  9
9  5  5  7  0  3  2  5  8  8  9
工作示例

m = ~(corr.mask(np.eye(len(corr), dtype=bool)).abs() > 0.75).any()

raw = corr.loc[m, m]
np.random.seed([3,1415])
data = pd.DataFrame(
    np.random.randint(10, size=(10, 10)),
    columns=list('ABCDEFGHIJ'))
data

   A  B  C  D  E  F  G  H  I  J
0  0  2  7  3  8  7  0  6  8  6
1  0  2  0  4  9  7  3  2  4  3
2  3  6  7  7  4  5  3  7  5  9
3  8  7  6  4  7  6  2  6  6  5
4  2  8  7  5  8  4  7  6  1  5
5  2  8  2  4  7  6  9  4  2  4
6  6  3  8  3  9  8  0  4  3  0
7  4  1  5  8  6  0  8  7  4  6
8  3  5  8  5  1  5  1  4  3  9
9  5  5  7  0  3  2  5  8  8  9




当应用上面的代码时,我得到了一些单元格的NAs,这正常吗?视情况而定。为了让我告诉你,我需要想象一个可能发生这种情况的场景,或者你可以问一个问题,你在哪里提供了发生这种情况的示例数据集。步骤是,1.提供产生问题的最小数据集。2.描述y您正在尝试。3.您尝试尝试尝试的代码。4.为什么结果不是您期望的结果。5.表示您期望的数据集。从机器学习的上下文中,除了一个高度相关的列外,应该删除所有列。例如,取列“C”和“H”。您应该删除其中一个,而不是两个。如果您根据我的评论更正代码,我将不胜感激。此函数应成为数据帧的一部分。它可以节省通过corr矩阵搜索高相关性功能的时间
raw = corr.loc[m, m]
raw

      A     B     D     I
A  1.00  0.22 -0.12  0.13
B  0.22  1.00 -0.08 -0.34
D -0.12 -0.08  1.00 -0.45
I  0.13 -0.34 -0.45  1.00