如何删除均值重复的Pandas DataFrame列?附问题排查
解决DataFrame删除均值重复列的问题
首先看你遇到的问题:你用df[[each_column]].mean()得到的是带列名的Series对象,而不是单纯的均值数值,所以字典里的value会包含列标签信息,导致没法直接比较重复值。其实不用手动循环构建字典,Pandas有更简洁高效的原生方法来处理这个需求。
完整解决方案步骤:
计算所有列的均值
直接用df.mean()就能得到一个以列名为索引、均值为值的Series,不用写循环:col_means = df.mean() # 示例输出: # A 1.333333 # B 2.000000 # C 1.333333 # dtype: float64标记重复均值的列
用duplicated()方法,它会标记出重复出现的均值(默认保留第一个出现的列,后续重复的标记为True):duplicate_cols = col_means.duplicated() # 示例输出: # A False # B False # C True # dtype: bool筛选保留非重复均值的列
通过布尔索引筛选出不需要删除的列,重新赋值给原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
相关产品推荐
相关产品推荐

