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

Python中如何将CSV文件转为符合DecisionTreeClassifier要求的特征变量X

分类任务代码修正方案

现有代码问题清单

  • 生成的TestFile.csv每行包裹了方括号,pandas读取时会将整行识别为1列字符串,无法匹配14个特征的输入要求
  • 特征数据中存在NaN缺失值,sklearn自带的DecisionTreeClassifier不支持直接训练含缺失值的数据集
  • 未处理G1.csv的表头行(如果存在的话),会导致标签Y和特征X的样本顺序、数量不匹配
  • 标签Y为字符串格式,部分场景下无法被分类器直接识别,建议转换为数值类型
  • 预测输入P未做格式对齐,新版本sklearn会触发格式警告

最优实现方案(无需额外生成TestFile.csv)

直接用pandas对原始G1.csv切片,省去中间写文件的冗余步骤,代码更简洁不易出错:

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.impute import SimpleImputer

# 读取原始文件,header=0代表第一行是表头,若文件没有表头就填header=None
df = pd.read_csv('G1.csv', header=0)

# 直接提取标签Y(第一列)和特征X(原文件第4到17列,pandas索引从0开始,对应列索引3到16)
Y = df.iloc[:, 0].values
X_raw = df.iloc[:, 3:17].values

# 处理缺失值,这里用均值填充,也可替换为'median'(中位数)、'constant'(固定值)等策略
imputer = SimpleImputer(strategy='mean')
X = imputer.fit_transform(X_raw)

# 训练模型
clf = DecisionTreeClassifier()
clf.fit(X, Y)

# 待预测样本处理,同步做缺失值填充
P = [[2.94008,3.03106,-9.70609,6.09667,6.51713,0.0900986,np.nan,np.nan,np.nan,0.792683,-1.70732,-1.82927,1008.96,31.54]]
P_processed = imputer.transform(P)

# 输出预测结果
print(f"\n1) 使用决策树的预测结果为 {str(clf.predict(P_processed)[0])}")

*注:如果缺失样本占比很低,也可以直接删除含缺失值的样本,无需填充,注意删除特征行时要同步删除对应位置的标签,保证样本对齐。

如果你一定要用已生成的TestFile.csv

可以用以下代码读取并处理你现有的带方括号的TestFile.csv:

import ast
import numpy as np

# 逐行解析带方括号的TestFile.csv
X_list = []
with open('TestFile.csv', 'r') as f:
    for line in f:
        # 去掉换行符后安全解析字符串为数值列表
        row = ast.literal_eval(line.strip())
        X_list.append(row)
X_raw = np.array(X_list, dtype=np.float64)
# 后续缺失值处理、训练步骤和上述最优方案的对应部分一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:15:08