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

神经网络训练中Label Encoding索引错误及数据类型问题求助

解决分类特征编码时的索引错误与类型不兼容问题

错误原因分析

  1. 索引错误:你通过.values把X转换成了numpy数组,而numpy数组不支持像DataFrame那样用列名(X['Test'])访问元素,只能使用整数索引、切片等,这直接导致了第一个报错。
  2. 类型不兼容错误:Marsh列同时存在float、int、str三种数据类型,而LabelEncoder要求输入必须是统一的字符串或数值类型,混合类型触发了第二个报错。

修正方案与代码

先保留X的DataFrame格式(不要过早转numpy数组),方便按列名处理分类特征;同时统一混合类型列的格式,再进行编码:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, KFold
from sklearn.preprocessing import StandardScaler, LabelEncoder
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
from sklearn.metrics import r2_score

# 加载数据集
data = pd.read_excel('Teste JMP.xlsx')

# 保留X为DataFrame格式,方便按列名操作分类特征
X = data.drop(['Brookfield', 'Marsh'], axis=1)
y = data[['Brookfield', 'Marsh']].values

# 初始化编码器
label_encoder = LabelEncoder()

# 处理Test列:先转字符串确保类型统一,再编码
X['Test'] = label_encoder.fit_transform(X['Test'].astype(str))

# 处理Measurement Stage列(如果该列也是分类特征)
if 'Measurement Stage' in X.columns:
    X['Measurement Stage'] = label_encoder.fit_transform(X['Measurement Stage'].astype(str))

# 若需要处理Marsh列(比如作为分类目标):先统一类型再编码
# marsh_encoder = LabelEncoder()
# data['Marsh'] = marsh_encoder.fit_transform(data['Marsh'].astype(str))
# 处理后需重新分割X和y(如果Marsh是输入特征)

# 最后将X转为numpy数组,供后续模型训练使用
X = X.values

# 后续可继续编写数据集拆分、标准化、模型构建等代码

额外说明

  • 不要过早将DataFrame转为numpy数组,保留DataFrame格式能更便捷地处理列级操作(比如筛选分类列、处理缺失值等)。
  • 对于混合类型的列,通过.astype(str)统一转为字符串是最稳妥的方式,避免类型冲突;如果是数值型列存在异常字符串,可先清理这些异常值(比如替换为NaN后填充)再处理。
  • 若Marsh是回归任务的目标变量,不能用LabelEncoder,需先清理其中的非数值内容,确保列是纯数值类型。

内容的提问来源于stack exchange,提问作者Leonor Magalhães

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:07:41