numpy处理datetime date与timedelta64相加报UFuncTypeError问题
报错解决方法
错误原因
该报错是运算两侧数据类型不兼容导致的:tmin是Python原生datetime.date类型,对应numpy数组的object dtype,无法直接和numpy专属的timedelta64[D]时间差类型执行加法运算。
解决方案
方法1(推荐):将日期数组转为numpy datetime64类型
创建xtim数组时直接指定日期类型,后续所有时间运算都用numpy内置时间类型执行,效率更高:
import numpy as np import datetime vals = [ datetime.date.fromisoformat('2004-06-01'), datetime.date.fromisoformat('2004-07-01'), datetime.date.fromisoformat('2004-08-01'), datetime.date.fromisoformat('2004-09-01'), datetime.date.fromisoformat('2004-10-01'), datetime.date.fromisoformat('2004-11-01')] # 关键修改:指定dtype为datetime64[D],替换默认的object类型 xtim = np.array(vals, dtype='datetime64[D]') tmin = np.min(xtim) ytim = np.arange(0.0, 150.0, 30.0) tnew = tmin + ytim.astype('timedelta64[D]')
运行后得到的tnew就是你需要的从tmin开始每隔30天的日期数组。如果后续需要转回Python原生datetime对象,直接调用tolist()方法即可:
tnew_python = tnew.tolist()
方法2:仅转换tmin的类型
如果不想修改原始xtim数组的类型,也可以只在做加法前单独转换tmin的类型:
xtim = np.array(vals) tmin = np.min(xtim) # 单独把原生date对象转为numpy datetime64类型 tmin_np = np.datetime64(tmin) ytim = np.arange(0.0, 150.0, 30.0) tnew = tmin_np + ytim.astype('timedelta64[D]')
内容的提问来源于stack exchange,提问作者PetGriffin
相关产品推荐
相关产品推荐

