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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:50:24