TypeError:timedelta days组件的类型不受支持:numpy.int32



在下面的循环中,当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组件的intfloat值。以下是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.int64np.intnp.float64np.float之外的任何其他类型都会触发TypeError

编辑

@Reti43建议以下错误跟踪器问题资源将其他numpy.dtype(np.int8np.int16np.int32np.float16np.float32等(对象导致TypeError的原因识别为这些对象分别缺乏从基元类型对象intfloat的继承。

相关内容

最新更新