如何使用列表推导式自动划分pandas数据框的分类列与连续列
自动划分pandas数据集分类列与连续列的实现方案
可以通过列表推导式结合pandas的列类型判断、业务规则实现自动划分,无需手动维护列名列表。
基础版本实现
默认将字符串、category类型列识别为分类列,数值类型(int、float)识别为连续列,适合字段命名规范、数值型分类特征少的场景:
import pandas as pd df = pd.read_csv('data.csv') # 自动筛选分类列 categorical_columns = [col for col in df.columns if df[col].dtype in ['object', 'category']] # 自动筛选连续列 continuous_columns = [col for col in df.columns if pd.api.types.is_numeric_dtype(df[col])]
优化版本实现
针对订单ID、邮编这类本质是分类特征、但可能被pandas识别为数值的字段,可以新增业务关键词规则过滤,适配大多数业务场景:
import pandas as pd df = pd.read_csv('data.csv') # 自定义分类特征关键词,可根据业务场景增减 categorical_keywords = ['id', 'state', 'city', 'zip', 'code', 'category', 'type'] # 自动筛选分类列:满足类型要求或者命中关键词的列 categorical_columns = [ col for col in df.columns if df[col].dtype in ['object', 'category'] or any(keyword in col.lower() for keyword in categorical_keywords) ] # 连续列取分类列之外的所有列即可 continuous_columns = [col for col in df.columns if col not in categorical_columns]
补充注意事项
- 如果数据集存在数值型离散分类特征(比如1-5分的评分、0/1标识的二分类特征),可以额外增加唯一值判断规则,比如
df[col].nunique() < len(df)*0.01(唯一值占比低于1%归为分类列),把规则加到分类列的筛选条件里即可。 - 读取csv时可以通过
dtype参数强制指定特殊字段的类型,比如pd.read_csv('data.csv', dtype={'start_zip': str, 'end_zip': str}),避免邮编、身份证号这类长数字被自动转成数值导致精度丢失、分类错误。
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

