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

如何删除均值重复的Pandas DataFrame列?附问题排查

解决DataFrame删除均值重复列的问题

首先看你遇到的问题:你用df[[each_column]].mean()得到的是带列名的Series对象,而不是单纯的均值数值,所以字典里的value会包含列标签信息,导致没法直接比较重复值。其实不用手动循环构建字典,Pandas有更简洁高效的原生方法来处理这个需求。

完整解决方案步骤:

  1. 计算所有列的均值
    直接用df.mean()就能得到一个以列名为索引、均值为值的Series,不用写循环:

    col_means = df.mean()
    # 示例输出:
    # A    1.333333
    # B    2.000000
    # C    1.333333
    # dtype: float64
    
  2. 标记重复均值的列
    用duplicated()方法,它会标记出重复出现的均值(默认保留第一个出现的列,后续重复的标记为True):

    duplicate_cols = col_means.duplicated()
    # 示例输出:
    # A    False
    # B    False
    # C     True
    # dtype: bool
    
  3. 筛选保留非重复均值的列
    通过布尔索引筛选出不需要删除的列,重新赋值给原DataFrame:

    df = df.loc[:, ~duplicate_cols]
    

完整示例代码:

import pandas as pd

# 构造你的示例数据
data = {
    'A': [1, 0, 3],
    'B': [2, 2, 2],
    'C': [1, 0, 3]
}
df = pd.DataFrame(data)

# 计算列均值
col_means = df.mean()
# 标记重复均值的列
duplicate_cols = col_means.duplicated()
# 保留非重复列
df = df.loc[:, ~duplicate_cols]

print(df)
# 输出结果:
#    A  B
# 0  1  2
# 1  0  2
# 2  3  2

为什么你的原代码有问题?

df[[each_column]]返回的是一个单列DataFrame,调用mean()后得到的是带有列名的Series(比如A 1.333333),而不是单个浮点数。如果想在循环里获取纯数值,应该改成df[each_column].mean()(去掉外层的方括号,直接取Series),但其实完全没必要写循环,用上面的原生方法更高效简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:34:24