首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError: timedelta组件的不支持类型: numpy.int32

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

Stack Overflow用户
提问于 2021-03-18 22:44:02
回答 1查看 1.8K关注 0票数 1

在下面的循环中,当i=0时,我得到了以下错误。我也不知道原因?如果我在一个单独的程序中测试代码的话,那就很好了。为什么?谢谢你的帮忙

不起作用的代码:

代码语言:javascript
运行
复制
for i in np.arange(0,delta.days+1,0.5):   
    print('day=',i)
    print(tick_min)
    nextdate = tick_min + timedelta(days=i)

输出:

代码语言:javascript
运行
复制
day= 0
2021-01-30 17:20:38
TypeError: unsupported type for timedelta days component: numpy.int32

作为一个单独的方案,它正在发挥作用:

代码语言:javascript
运行
复制
import datetime

tick_min=datetime.datetime(2021, 1, 30, 17, 20, 38)

nextdate = tick_min + timedelta(days=0)
print(nextdate)

输出:

代码语言:javascript
运行
复制
2021-01-30 17:20:38
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-18 23:42:11

正如@John所指出的,将整数转换为整数应该解决这个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 43建议使用以下bug跟踪器问题资源来标识其他numpy.dtype (np.int8np.int16np.int32np.float16np.float32等)对象导致TypeError的原因,因为这些对象缺乏来自原始类型对象intfloat的继承。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66700179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档