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

如何将Timestamp类型日期转换为整数值,适配Polyfit函数输入要求

报错根因

yfinance返回的DataFrame索引是Timestamp时间类型,不属于可直接转换为浮点数的字符串/数值类型,所以直接执行astype(float)会触发类型错误。你需要先将时间类型转换为数值型的时间度量,再传入np.polyfit使用。

推荐解法(无需循环,性能更高)

直接通过pandas矢量化操作完成转换,无需遍历DataFrame:

import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt

stock = 'TSLA'
start = '2020-11-01'

df = yf.download(stock , start=start)

# 转换为距离起始统计日的天数(整数,符合polyfit输入要求)
nfx = (df.index - df.index[0]).days.values
# 直接提取收盘价数组
nfy = df['Close'].values

# 可直接传入polyfit做拟合,示例为拟合1次线性函数
fit_coef = np.polyfit(nfx, nfy, deg=1)
fit_func = np.poly1d(fit_coef)

兼容原有循环写法的修改方案

如果需要保留你原来的循环逻辑,只需调整x值的转换逻辑即可:

nfx = []
nfy = []
# 取起始日期作为基准
start_ts = df.index[0]
for index, row in df.iterrows():
    # 计算当前日期距基准日的天数,为整数格式
    nfx.append((index - start_ts).days)
    nfy.append(row['Close'])

可选转换方式:转Unix时间戳

如果需要使用1970年1月1日以来的秒级整数时间戳作为x值,可使用如下转换方式:

# 秒级整数时间戳
nfx = df.index.astype('int64') // 10**9

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

相关产品推荐
方舟 Agent Plan

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

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