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

字符串转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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:18:04