如何删除Pandas DataFrame中除NaN外所有行值均相同的列
实现方法
你可以通过列级的规则过滤完成需求,核心逻辑为:对每列先剔除空值后统计唯一值数量,若唯一值数量为1则删除该列,其余列保留。
完整可运行代码如下:
import pandas as pd import numpy as np # 构造测试数据集 df = {'brand_no':['BH 1', 'BH 2', 'BH 5', 'BH 7', 'BH 6'], '1240000601_min':[5.87,5.87,5.87,5.87,np.nan], '1240000601_max':[8.87,7.47,10.1,1.9,10.8], '1240000603_min':[5.87,np.nan,6.5,2.0,7.8], '1240000603_max':[8.57,7.47,10.2,1.0,10.2], '1240000604_min':[5.87,5.67,6.9,1.0,7.8], '1240000604_max':[8.87,8.87,8.87,np.nan,8.87], '1240000605_min':[15.87,15.67,16.9,1.0,17.8], '1240000605_max':[18.11,17.47,20.1,1.9,22.6], '1240000606_min':[8.12,8.12,np.nan,8.12,np.nan], '1240000606_max;':[np.nan,7.47,10.1,1.9,np.nan]} df = pd.DataFrame(df) # 核心过滤逻辑 filtered_df = df.loc[:, df.apply(lambda col: col.dropna().nunique() != 1)] # 查看结果 print(filtered_df)
逻辑说明
- 对DataFrame的每列执行
dropna()剔除NaN值,再用nunique()统计剩余值的唯一值数量 - 仅保留唯一值数量不等于1的列,自动剔除「除NaN外所有值都相同」的列
- 如果你需要同时删除全为NaN的列,可以把过滤规则调整为:
filtered_df = df.loc[:, df.apply(lambda col: col.dropna().nunique() not in (0,1))]
内容的提问来源于stack exchange,提问作者simpleboi
相关产品推荐
相关产品推荐

