字符串转numpy数组对DataFrame运行线性回归循环时报错如何解决
错误产生原因
- 特征与标签的赋值逻辑错误:你将
X和y的定义写在了iteritems()遍历的循环外部,遍历完成后cn只会保留最后一次迭代的列名(字符串类型),cd只会保留最后一列的数据,你直接把字符串格式的列名作为特征输入到线性回归模型中,模型要求输入数值型数据,因此抛出类型转换错误。 - 变量逻辑错位:按照你的需求应该是用处理后的
Date列作为特征X,遍历其他列分别作为标签y来训练模型,现有代码完全搞反了特征和标签的取值来源。 - 额外兼容问题:代码中使用了
pd读取Excel,但没有导入pandas库,也会引发额外报错。
修复方案
首先调整特征取值逻辑,把处理好的Date列作为固定的特征X,遍历除Date外的每一列作为y训练模型即可,修复后的代码如下:
import datetime import numpy as np import pandas as pd # 补充缺失的pandas导入 from sklearn.linear_model import LinearRegression import os os.chdir(r'path') df = pd.read_excel("test.xlsx") def process_date(date_str): # 日期格式为month-day-year d = datetime.datetime.strptime(date_str, '%m-%d-%Y') return d.timestamp() # 处理日期列为数值型时间戳,作为全局特征X df['Date'] = df['Date'].apply(process_date) X = df['Date'].to_numpy().reshape(-1,1) # 遍历除Date外的所有列作为标签y训练模型 for columnName, columnData in df.drop('Date', axis=1).iteritems(): print('当前训练列名 : ', columnName) y = columnData.to_numpy() model = LinearRegression() model.fit(X, y) # 可根据需求补充打印模型系数、得分等逻辑 print(f'模型拟合得分:{model.score(X,y)}')
内容的提问来源于stack exchange,提问作者juge
相关产品推荐
相关产品推荐

