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

如何高效选择Pandas DataFrame中仅含1个唯一值的列?

高效筛选Pandas DataFrame中仅含1个唯一值的列

嘿,这个需求我平时清洗数据时经常碰到,用你提到的nunique()方法完全可以轻松实现,下面给你两种实用的写法,从清晰易懂到简洁高效都覆盖到了:

方法一:分步实现,逻辑清晰

适合刚接触Pandas的朋友,每一步都能明确看到处理过程:

import pandas as pd

# 先造个示例DataFrame方便演示
df = pd.DataFrame({
    'user_id': [1001, 1001, 1001],
    'gender': ['male', 'male', 'male'],
    'score': [85, 92, 88],
    'level': ['L2', 'L2', 'L2']
})

# 计算每列的唯一值数量
col_unique_counts = df.nunique()

# 筛选出唯一值数量为1的列名
target_cols = col_unique_counts[col_unique_counts == 1].index.tolist()

# 提取目标列组成新的DataFrame
result_df = df[target_cols]

这里df.nunique()会返回一个Series,索引是列名,值是对应列的唯一值个数。我们用布尔索引挑出值为1的项,再转成列名列表去筛选原DataFrame。

方法二:一行代码搞定,简洁高效

如果追求代码精简,可以直接用loc索引一步到位:

result_df = df.loc[:, df.nunique() == 1]

df.loc[:, 布尔条件]会直接保留符合条件的列,这里df.nunique() == 1生成的布尔Series刚好对应每列是否满足“仅1个唯一值”的要求。

补充:处理空值的特殊情况

默认情况下nunique()会忽略NaN值,如果你的数据里有全NaN的列,想要把它也识别为“仅1个唯一值”的列,可以加上dropna=False参数:

# 包含空值的情况也能正确筛选
result_df = df.loc[:, df.nunique(dropna=False) == 1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:08:38