在下面的循环中,当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
发布于 2021-03-18 23:42:11
正如@John所指出的,将整数转换为整数应该解决这个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 43建议使用以下bug跟踪器问题资源来标识其他numpy.dtype
(np.int8
、np.int16
、np.int32
、np.float16
、np.float32
等)对象导致TypeError
的原因,因为这些对象缺乏来自原始类型对象int
和float
的继承。
https://stackoverflow.com/questions/66700179
复制相似问题