如何自动删除Pandas DataFrame中离散值过少的列?
优雅删除唯一值过少的离散列
嘿,这个需求我经常碰到!你原来的循环写法虽然能实现功能,但确实不够简洁高效。用Pandas的内置方法可以一行搞定,代码更优雅还能提升性能。
核心实现思路
利用Pandas的nunique()方法快速计算每列的唯一值数量,然后通过布尔索引直接筛选出符合条件的列(唯一值数量≥100),一步完成列的保留/删除。
优雅的代码实现
# 一行代码完成筛选:保留唯一值数量≥100的列 X = X.loc[:, X.nunique() >= 100]
额外细节补充
- 性能优势:Pandas的内置方法是基于向量化操作实现的,比手动循环效率高得多,尤其是当数据集很大的时候,差距会非常明显。
- 处理缺失值:默认情况下
nunique()会忽略NaN值,如果需要把NaN也当作一个独立的取值统计,可以加上dropna=False参数:# 包含NaN在内统计唯一值数量 X = X.loc[:, X.nunique(dropna=False) >= 100] - 可读性:这种写法逻辑直观,一眼就能看出来是在筛选唯一值达标的列,比循环代码更容易维护。
内容的提问来源于stack exchange,提问作者Wehl Berker
相关产品推荐
相关产品推荐

