You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中检测特征重复并移除重复特征?

处理重复特征并明确重复关系的解决方案

我来帮你搞定这个重复特征处理的问题,同时针对你提到的「特征超过100个时seaborn热图难以阅读」的痛点,给出更高效的替代方案。

一、精准识别并移除完全重复的特征

首先,我们可以直接检查哪些特征的取值完全一致(比看相关性更直接,毕竟完全重复的列相关系数为1,但相关系数为1不一定是完全重复),然后保留每组重复特征中的一个,同时输出明确的重复关系:

import pandas as pd

# 构造你的示例数据集
data = {
    'Id': [1, 2],
    'feature1': [4, 5],
    'feature2': [5, 6],
    'feature3': [7, 8],
    'feature4': [7, 8],
    'feature5': [5, 6],
    'feature6': [5, 5]
}
df = pd.DataFrame(data)

# 找出所有重复特征组
duplicate_groups = []
seen_columns = set()

# 跳过Id列,只检查特征列
for col in df.columns[1:]:
    if col not in seen_columns:
        # 找到所有和当前列完全相同的列
        matching_cols = df.columns[df.eq(df[col]).all()].tolist()
        if len(matching_cols) > 1:
            duplicate_groups.append(matching_cols)
            seen_columns.update(matching_cols)
        else:
            seen_columns.add(col)

# 输出重复关系
print("重复特征对应关系:")
for group in duplicate_groups:
    base_feature = group[0]
    duplicates = ", ".join(group[1:])
    print(f"{base_feature} 与 {duplicates} 完全相同")

# 构建去重后的数据集(保留每组第一个特征+非重复特征)
keep_columns = ['Id'] + [group[0] for group in duplicate_groups] + [col for col in df.columns[1:] if col not in seen_columns]
df_deduplicated = df[keep_columns]

print("\n去重后的数据集:")
print(df_deduplicated)

运行这段代码会得到你想要的结果:

重复特征对应关系:
feature2 与 feature5 完全相同
feature3 与 feature4 完全相同

去重后的数据集:
Id feature1 feature2 feature3 feature6
0 1 4 5 7 5
1 2 5 6 8 5

二、替代seaborn heatmap处理大量特征的方案

当特征数量超过100时,热图会变得拥挤不堪,这里有两个更实用的方法:

方法1:直接提取高度相关(系数=1)的特征对

如果你的核心需求是找完全重复/线性相关的特征,可以直接从相关系数矩阵中筛选出值为1的特征对(排除自身对比):

corr_matrix = df.corr()

# 找出相关系数=1的特征对(跳过自身)
high_corr_pairs = []
for i in range(len(corr_matrix.columns)):
    for j in range(i+1, len(corr_matrix.columns)):
        if corr_matrix.iloc[i, j] == 1.0:
            high_corr_pairs.append((corr_matrix.columns[i], corr_matrix.columns[j]))

print("高度相关(系数=1)的特征对:")
for pair in high_corr_pairs:
    print(f"{pair[0]} ↔ {pair[1]}")

方法2:用聚类热图简化视图

如果还是想可视化,可以用seaborn的clustermap,它会自动将相似的特征聚类在一起,即使特征数量多,也能快速定位重复/高度相关的特征组:

import seaborn as sns
import matplotlib.pyplot as plt

# 生成聚类热图,调整尺寸适配大量特征
sns.clustermap(df.corr(), cmap='coolwarm', figsize=(12, 12))
plt.show()

重复的特征会被聚类到同一个分支,一眼就能识别出来。


内容的提问来源于stack exchange,提问作者Nabih Bawazir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:23:37