如何高效选择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
相关产品推荐
相关产品推荐

