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

开发股票预测仪表盘时遇Timestamp转float类型错误的解决咨询

解决Timestamp无法转换为float导致MinMaxScaler归一化失败的问题

我刚看了你的代码和错误信息,问题出在你对Date列的处理上——你本来试图把Timestamp转成时间戳(float类型),但后面的循环又把原始的Timestamp值重新赋值回去了,导致final_dataset里混着Timestamp类型的数据,而MinMaxScaler只能处理数值型数据,所以才触发了这个错误。

问题代码的核心错误点

你这段代码里的循环完全覆盖了之前的Timestamp转float操作:

new_dataset['Date'] = new_dataset['Date'].apply(pd.Timestamp.timestamp)
for i in range(0,len(data)):
    new_dataset["Date"][i]=data['Date'][i]  # 这里把原始Timestamp对象重新赋值回去,之前的转换白做了!
    new_dataset["Close"][i]=data["Close"][i]

修正后的完整代码

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# 1. 排序原始数据(这一步逻辑没问题)
data = df.sort_index(ascending=True, axis=0)

# 2. 直接构建新数据集,同时完成Timestamp到float时间戳的转换
# 用pandas向量操作替代循环,高效且避免赋值错误
new_dataset = pd.DataFrame({
    'Date': data['Date'].apply(pd.Timestamp.timestamp),  # 一次性把所有Timestamp转成float类型的时间戳
    'Close': data['Close']
})

# 3. 准备用于归一化的数据集(此时Date和Close都是数值类型)
final_dataset = new_dataset.values

# 4. 划分训练集和验证集(逻辑不变)
train_data = final_dataset[0:987, :]
valid_data = final_dataset[987:, :]

# 5. 可选:设置直观的日期索引(如果后续需要用日期查看数据)
new_dataset.index = pd.to_datetime(data['Date'])
new_dataset.drop("Date", axis=1, inplace=True)

# 6. 执行归一化(现在数据集全是数值,不会再触发类型错误)
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(final_dataset)

# 7. 构建训练序列(逻辑不变)
x_train_data, y_train_data = [], []
for i in range(60, len(train_data)):
    x_train_data.append(scaled_data[i-60:i, 0])
    y_train_data.append(scaled_data[i, 0])
x_train_data, y_train_data = np.array(x_train_data), np.array(y_train_data)
x_train_data = np.reshape(x_train_data, (x_train_data.shape[0], x_train_data.shape[1], 1))

关键修改说明

  • 替换循环赋值:用pandas的向量操作data['Date'].apply(pd.Timestamp.timestamp)一次性完成转换,既高效又避免了循环覆盖的错误。
  • 验证数据类型:你可以在转换后添加print(new_dataset.dtypes),确认Date列是float64类型,Close列是数值类型(如float64/int64),确保MinMaxScaler能正常处理。
  • 优化索引设置:如果需要用日期作为数据集索引,建议保留原始的datetime类型,这样后续查看数据会更直观。

新手友好提示

  • 尽量避免用for循环操作DataFrame的行,pandas的内置向量操作不仅效率更高,还能减少这类低级赋值错误。
  • 遇到数据类型相关错误时,先打印df.dtypes检查每一列的类型,这是快速定位问题的有效方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:07:44