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

如何在sklearn中处理非整数字符串数据以适配fit训练方法?

非整数(字符串)类型数据集处理方案

首先明确核心逻辑:sklearn所有模型仅支持数值类型的输入,字符串形式的分类特征、分类目标都需要先转换为数值编码,直接使用astype强制转换会报错,因为字符串无法直接映射为有效数值。

步骤1:读取数据并拆分X和y

首先从csv读取数据后,按需求拆分特征矩阵X和目标列y,你当前需求是将value作为目标列,所以特征取剩余的type列即可:

import pandas as pd

# 读取本地csv文件
df = pd.read_csv("你的文件路径.csv")
# 拆分特征X(所有输入特征列)和目标y(预测目标列)
X = df[["type"]]
y = df["value"]

步骤2:字符串编码转换

特征编码(处理X的字符串值)

你的type列属于无序分类特征(g和k没有高低顺序之分),优先使用独热编码转换:

from sklearn.preprocessing import OneHotEncoder

# 初始化独热编码器,sparse_output=False直接输出数组,drop='first'避免多重共线性
ohe = OneHotEncoder(sparse_output=False, drop="first")
# 拟合数据同时完成转换
X_encoded = ohe.fit_transform(X)

如果是有顺序的分类特征,可以替换为OrdinalEncoder做编码。

目标编码(处理y的字符串值)

分类任务的字符串目标使用LabelEncoder转换为数值标签:

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
y_encoded = le.fit_transform(y)

后续预测完成后可以用le.inverse_transform(y_pred)把数值标签转回原始字符串。

步骤3:模型训练

编码完成后就可以正常调用sklearn的fit方法训练:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_encoded, y_encoded, test_size=0.2, random_state=42)

# 初始化模型训练
model = RandomForestClassifier()
model.fit(X_train, y_train)

注意事项

  • 新的预测数据做特征编码时,必须调用已经拟合过的ohe.transform(新数据),不能重新fit,避免编码规则不一致。
  • 若存在多列字符串特征,所有分类特征都需要按特征类型做对应编码后再输入模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:45:03