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

datetime时间戳插值报错:numpy.interp无法处理datetime类型问题

解决numpy.interp处理datetime对象的TypeError问题

问题根源

np.interp仅支持数值类型(如int、float)的输入参数,无法直接处理datetime.datetime对象,这就是触发TypeError: float() argument must be a string or a number, not 'datetime.datetime'的核心原因。

解决方案

把所有datetime对象转换为Unix时间戳(浮点数格式),用统一的数值类型完成插值计算,具体步骤:

  • 对event、timestamp_timeseries中的每个datetime对象,调用.timestamp()方法转成浮点数时间戳
  • 用转换后的数值执行np.interp插值
  • 插值结果就是对应事件时间点的y值,无需额外转换

修正后的代码示例

通用场景代码片段

import numpy as np
import datetime

# 假设已有的时间序列和对应y值
timestamp_timeseries = [datetime.datetime(2022, 10, 11, 12, 6, 40, 480000), 
                        datetime.datetime(2022, 10, 11, 12, 52, 51, 481000)]
y_value = [335872, 336896]
k = 1  # 示例索引

# 转换所有datetime为时间戳
event_ts = event.timestamp()
ts_left = timestamp_timeseries[k-1].timestamp()
ts_right = timestamp_timeseries[k].timestamp()

# 执行插值计算
test = np.interp(event_ts, [ts_left, ts_right], [y_value[k-1], y_value[k]])

针对你提供的示例代码的修正版

import numpy as np
import datetime

test = np.interp(
    # 转换事件时间为时间戳
    datetime.datetime(2022, 10, 11, 12, 24, 5, 922000).timestamp(),
    # 转换时间序列的两个锚点时间为时间戳
    [datetime.datetime(2022, 10, 11, 12, 6, 40, 480000).timestamp(), 
     datetime.datetime(2022, 10, 11, 12, 52, 51, 481000).timestamp()], 
    [335872, 336896]
)

补充说明

  • .timestamp()方法返回的是从1970-01-01 00:00:00 UTC到目标时间的秒数(含小数,支持微秒级精度),完全满足插值的精度要求
  • 如果你的时间序列是pandas的DatetimeIndex,也可以用.astype(np.float64)直接转换为数值时间戳,效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:10:35