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

使用sklearn MinMaxScaler遇字符串转浮点数错误,求排查方案

问题分析与解决

嘿,我一眼就看到两个关键问题导致了你这个报错,咱们一个个来解决:

1. 直接触发报错的核心原因:把变量名当成字符串传入了

你在执行scaler.fit_transform('X_train')的时候,给X_train加了单引号——这就把原本的特征变量变成了一个字符串字面量'X_train'。MinMaxScaler自然没法把这个纯字符串转换成浮点型,这就是你看到ValueError: could not convert string to float: 'X_train'的根本原因。

解决方法:去掉引号,直接传入变量本身:

X_train = scaler.fit_transform(X_train)

2. 隐藏的潜在问题:X的赋值逻辑错误

看你代码里X的定义:

X=df.drop('p0',axis=1).values
X=df.drop('p9',axis=1).values

这里存在两个明显问题:

  • 重复赋值X,第一次drop('p0')的操作被完全覆盖了,而且你的数据里根本没有p0列,这行代码完全无效;
  • 你提到已经排除了Data列(datetime类型),但代码里没有处理这一列,导致X里可能包含了Data这个非数值列——就算解决了引号问题,后续还是会因为datetime类型无法缩放而报错。

正确的X赋值方式:先排除Data列,再去掉目标变量p9,得到纯数值的特征矩阵:

# 先排除非数值的Data列,再去掉目标变量p9
X = df.drop(['Data', 'p9'], axis=1).values
y = df['p9'].values

修正后的完整代码

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

# 正确定义特征和目标变量,确保只保留数值型特征
X = df.drop(['Data', 'p9'], axis=1).values
y = df['p9'].values

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)

# 初始化缩放器,训练并转换训练集(注意不要给变量加引号)
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
# 测试集只做转换,不要重新fit
X_test = scaler.transform(X_test)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:42:35