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

如何使用pandas或sklearn识别非分类数值型与回归类特征

识别数据集中非分类数值型/回归类特征的实现方法

判断非分类数值特征的核心逻辑有两个:一是列本身为数值类型(整数、浮点数等),二是列的唯一值占总样本的比例较高(分类特征通常唯一值数量极少,比如性别、等级类特征通常只有2-10种取值,回归类数值特征取值离散/连续且重复少)。以下分别给出pandas和sklearn的实现方案:


方法1:仅用pandas实现

步骤1:构造示例DataFrame

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [224, 9978, 5],
    'C': ['A', 'B', 'D']
})

步骤2:特征筛选

你可以根据业务场景自定义唯一值占比阈值,以下示例阈值设置为0.8(即唯一值占总样本80%以上判定为非分类数值特征):

# 第一步:筛选所有数值类型的列,排除字符串、对象类非数值列
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns.tolist()

# 第二步:按唯一值占比筛选非分类数值特征
threshold = 0.8
non_categorical_features = []
for col in numeric_cols:
    unique_ratio = df[col].nunique() / len(df)
    if unique_ratio > threshold:
        non_categorical_features.append(col)

print("非分类数值/回归类特征:", non_categorical_features)

上述代码在示例数据集的输出结果为['A', 'B'],如果A列是ID类无需保留,可额外加规则排除。


方法2:结合sklearn实现

可以用sklearn自带的目标类型推断工具直接判断:

import pandas as pd
from sklearn.utils.multiclass import type_of_target

non_categorical_features = []
for col in df.columns:
    # 先判断列是否为数值类型
    if pd.api.types.is_numeric_dtype(df[col]):
        # 类型为continuous即为连续/回归类数值特征
        if type_of_target(df[col]) == 'continuous':
            non_categorical_features.append(col)

print("非分类数值/回归类特征:", non_categorical_features)

注意:type_of_target默认判断为continuous的条件是数值型且唯一值数量大于10,或列类型为浮点数。如果你的数据集样本量小、数值唯一值少但确实属于回归类特征,可以自行调整判断规则。

内容的提问来源于stack exchange,提问作者jr123456jr987654321

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:21:03