如何用Python Pandas识别单类别(含NaN)占比≥80%的分类变量
解决方案
步骤1:构建示例DataFrame
先还原你提供的数据集:
import pandas as pd import numpy as np df = pd.DataFrame({ "COL1": ["ABC", np.nan, "ABC", "ABC", "DDD", "ABC"], "COL2": [11, 10, 11, 11, 12, np.nan], "COL3": [np.nan, np.nan, np.nan, np.nan, np.nan, "GAME"] })
步骤2:筛选分类变量
只保留object或category类型的列(即分类变量):
# 提取所有分类变量列名 categorical_cols = df.select_dtypes(include=["object", "category"]).columns
步骤3:筛选符合占比条件的变量
遍历每个分类变量,用value_counts(dropna=False, normalize=True)计算含缺失值的类别占比,判断最大占比是否≥80%:
target_list = [] threshold = 0.8 for col in categorical_cols: # 计算各类别(含NaN)的占比 category_ratios = df[col].value_counts(dropna=False, normalize=True) # 获取该变量的最大类别占比 max_ratio = category_ratios.max() if max_ratio >= threshold: target_list.append(col) print(target_list) # 输出: ['COL3']
代码说明
select_dtypes(include=["object", "category"]):精准筛选分类变量,排除数值型列;value_counts(dropna=False):强制将NaN作为一个类别纳入统计,normalize=True直接返回占比而非计数;- 遍历过程中判断最大占比是否达标,将符合条件的列名存入列表。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

