如何检测数据集中的分类变量?含int64/float64类型变量的处理
如何用Python识别数值类型的分类变量
直接给你几种实用的解决方案:
1. 基于唯一值占比/数量自动判断
分类变量的核心特征是取值离散且重复度高,可以通过唯一值的数量或占比来区分:
- 列的唯一值数量远小于样本总量(比如占比低于10%)
- 或者唯一值的绝对数量很少(比如不超过20个)
用Python实现批量判断的代码如下:
import pandas as pd def is_categorical_numeric(series, unique_threshold=20, ratio_threshold=0.1): total_samples = len(series) unique_count = series.nunique() # 满足任一条件则判定为分类变量 return unique_count <= unique_threshold or (unique_count / total_samples) <= ratio_threshold # 加载你的数据集 df = pd.read_csv("your_dataset.csv") # 筛选所有int64/float64类型的列 numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns # 批量判断并输出结果 for col in numeric_cols: if is_categorical_numeric(df[col]): print(f"列 {col} 大概率是分类变量") else: print(f"列 {col} 是连续数值变量")
2. 结合业务知识手动标记
有些数值型分类变量有明确业务含义(比如0=男/1=女、1=本科/2=硕士),直接手动指定更准确:
# 列出已知的数值分类列 categorical_numeric_cols = ['gender_code', 'edu_level', 'marital_status'] # 转换为pandas的category类型,方便后续分析 df[categorical_numeric_cols] = df[categorical_numeric_cols].astype('category')
3. 查看取值分布确认
对拿不准的列,直接查看取值的分布情况:
# 查看目标列的取值计数 print(df['target_column'].value_counts())
如果输出里只有几个离散值,且每个值的出现次数很多,那就是分类变量;如果取值连续、每个值出现次数极少,就是连续变量。
内容的提问来源于stack exchange,提问作者Martí Castell
相关产品推荐
相关产品推荐

