Pandas筛选唯一值数大于2的分类列并生成列名列表
Pandas 筛选唯一值数大于2的分类列实现方案
核心逻辑
- 第一步:从DataFrame中筛选出所有分类列,包含显式声明为
category类型的列、以及存储分类值的object(字符串)类型列,自动排除数值、日期类型列 - 第二步:对筛选出的分类列逐列统计唯一值数量,保留唯一值个数大于2的列名,整理为目标列表
实现代码
# 筛选所有分类类型列 cat_columns = df.select_dtypes(include=['object', 'category']).columns # 统计唯一值并过滤,生成目标列表 mylist = cat_columns[df[cat_columns].nunique() > 2].tolist()
示例验证
用提供的样例数据构造测试DF:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'date_time1': pd.to_datetime(['2020-10-08 19:09:21.884']*5), 'date_time2': pd.to_datetime(['2021-11-08 15:18:26.864']*5), 'cat_col1': ['ABC', 'BCD', 'ABC', 'CDE', 'BCD'], 'cat_col_2': ['xyz', 'xyz', 'yza', 'xyz', 'xyz'], 'num_col1': [20, 30, 40, 10, 20], 'num_col2': [40, 50, 30, 80, 70], 'cat_col3': ['PQR', 'ABC', 'MNO', 'CDE', 'MNO'] })
运行上述核心代码后,得到的mylist输出为['cat_col1', 'cat_col3'],和预期结果完全匹配。
补充说明
如果分类列中存在空值,且需要将空值算作一个独立的唯一值参与统计,可以给nunique()传入dropna=False参数,代码修改为:
mylist = cat_columns[df[cat_columns].nunique(dropna=False) > 2].tolist()
内容的提问来源于stack exchange,提问作者user18334254
相关产品推荐
相关产品推荐

