在下面的循环中,当I=0时,我得到了以下错误。我不知道为什么?如果我在一个单独的程序中测试代码,它是好的。为什么?感谢您的帮助
不起作用的代码:
for i in np.arange(0,delta.days+1,0.5):
print('day=',i)
print(tick_min)
nextdate = tick_min + timedelta(days=i)
输出:
day= 0
2021-01-30 17:20:38
TypeError: unsupported type for timedelta days component: numpy.int32
作为一个单独的程序,它正在运行:
import datetime
tick_min=datetime.datetime(2021, 1, 30, 17, 20, 38)
nextdate = tick_min + timedelta(days=0)
print(nextdate)
输出:
2021-01-30 17:20:38
正如@John Gordon所指出的,转换为整数应该可以解决这个TypeError
。但是,DateTime
库的较新版本同时支持timedelta
方法的days组件的int
和float
值。以下是DateTime文档DateTime.timedelta.中的相关段落
根据第一个代码片段(包含np.arange
向量上的循环的代码片段(判断,似乎您希望timedelta
中的days
参数是float
类型的基元。因此,将days
强制转换为整数可能会导致错误的结果。
这里的实际问题似乎是numpy向量默认为dtype="np.int32"
,这是由于您传递的参数,很可能是由于您在系统上安装的numpy版本。您可以通过强制转换为float
或在循环中用np.arange(0, delta.days + 1, 0.5)
替换np.arange(0, delta.days + 1, 0.5, dtype='float')
来解决此问题,因为使用除np.int64
、np.int
、np.float64
、np.float
之外的任何其他类型都会触发TypeError
。
编辑
@Reti43建议以下错误跟踪器问题资源将其他numpy.dtype
(np.int8
、np.int16
、np.int32
、np.float16
、np.float32
等(对象导致TypeError
的原因识别为这些对象分别缺乏从基元类型对象int
和float
的继承。