如何使用 python 代码显示不相关的列而不绘图

Posted

技术标签:

【中文标题】如何使用 python 代码显示不相关的列而不绘图【英文标题】:How to display uncorrelated columns using python code without plotting 【发布时间】:2021-11-23 03:41:14 【问题描述】:

我有一个 DataFrame,其中有些列是相关的,有些则不是。我只想将不相关的列显示为输出。谁能帮我解决这个问题。我不想绘制但显示不相关的列名。

【问题讨论】:

这能回答你的问题吗? Plot correlation matrix using pandas 我想显示不相关的列名而不是绘图。 【参考方案1】:

您可以先计算与df.corr() 的相关性,然后找到如下所示的列名。

试试这个:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.RandomState(0).rand(10, 10))
corr = df.corr()
#   0           1           2           3           4            5          6           7           8           9
#0  1.000000    0.347533    0.398948    0.455743    0.072914    -0.233402   -0.731222   0.477978    -0.442621   0.015185
#1  0.347533    1.000000    -0.284056   0.571003    -0.285483   0.382480    -0.362842   0.642578    0.252556    0.190047
#2  0.398948    -0.284056   1.000000    -0.523649   0.152937    -0.139176   -0.092895   0.016266    -0.434016   -0.383585
#3  0.455743    0.571003    -0.523649   1.000000    -0.225343   -0.227577   -0.481548   0.473286    0.279258    0.446650
#4  0.072914    -0.285483   0.152937    -0.225343   1.000000    -0.104438   -0.147477   -0.523283   -0.614603   -0.189916
#5  -0.233402   0.382480    -0.139176   -0.227577   -0.104438   1.000000    -0.030252   0.417640    0.205851    0.095084
#6  -0.731222   -0.362842   -0.092895   -0.481548   -0.147477   -0.030252   1.000000    -0.494440   0.381407    -0.353652
#7  0.477978    0.642578    0.016266    0.473286    -0.523283   0.417640    -0.494440   1.000000    0.375873    0.417863
#8  -0.442621   0.252556    -0.434016   0.279258    -0.614603   0.205851    0.381407    0.375873    1.000000    0.150421
#9  0.015185    0.190047    -0.383585   0.446650    -0.189916   0.095084    -0.353652   0.417863    0.150421    1.000000


threshold = 0.2
uncorr = (corr[(corr.abs() > threshold)].fillna('True').apply(lambda row: row[row == 'True'].index.tolist(), axis=1))
uncorr_df = uncorr.to_frame('col_name_uncorrelated')
# 0 with 4,9 uncorrelated
# 1 with 9 uncorrelated
...
# 9 with 0, 1, 4, 5, 8 uncorrelated

输出:

>>> uncorr_df

    col_name_uncorrelated
0   [4, 9]
1   [9]
2   [4, 5, 6, 7]
3   []
4   [0, 2, 5, 6, 9]
5   [2, 4, 6, 9]
6   [2, 4, 5]
7   [2]
8   [9]
9   [0, 1, 4, 5, 8]

【讨论】:

【参考方案2】:

首先计算相关性:

import pandas as pd
myDataFrame=pd.DataFrame(data)

correl=myDataFrame.corr()

定义“不相关”的含义。我这里用绝对值0.5

uncor_level=0.5

以下代码将为您提供不相关的对的名称

pairs=np.full([len(correl)**2,2],None) #define an empty array to store the results
z=0
for x in range(0,len(correl)): #loop for each row(index)

    for y in range(0,len(correl)): #loop for each column

        if abs(correl.iloc[x,y])<uncor_level:

            pair=[correl.index[x],correl.columns[y]]
            pairs[z]=pair
            z=z+1

【讨论】:

以上是关于如何使用 python 代码显示不相关的列而不绘图的主要内容,如果未能解决你的问题,请参考以下文章

拆分数据框的列并将它们重新组合为一列而不显示空格

如何定义游标,当我们在两个表之间有一个公共列而不给出别名时

如何删除一列并创建一个新列而不是在 EF Core 中重命名?

仅展开单击的列

如何重命名 df 列而不将列列表临时存储到变量中?

如何使用Scala的DataFrame比较表中的每一列而不关心列是啥? [重复]