【问题标题】:Datetime intervals with numpy.arange带有 numpy.arange 的日期时间间隔
【发布时间】:2017-02-02 17:34:53
【问题描述】:

我想创建每月间隔而不使用 np.arange 进行迭代。作为一个简单的例子,我想要一个包含 np.datetime64 对象的数组,该对象表示 1990-2000 范围内的元旦。我想是这样的:

np.arange(np.datetime64("1990-01-01"), np.datetime64("2000-01-01"), np.timedelta64(1, 'M'), dtype='datetime64[D]')

但这会引发错误

TypeError: Cannot cast NumPy timedelta64 scalar from metadata [M] to [D] according to the rule 'same_kind'

如果我将 dtype 切换为 datetime[M],我会得到一个月份数组,但我当然想要日期。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您可以将原来的dtype设置为datetime64[Y],然后用.astype()将其转换为datetime64[D]

    np.arange(np.datetime64("1990-01-01"), np.datetime64("2000-01-01"), np.timedelta64(1, 'Y'), dtype='datetime64[Y]').astype('datetime64[D]')
    

    【讨论】:

    • 可以简写为:np.arange("1990-01-01", "2000-01-01", 1, dtype='datetime64[Y]').astype('datetime64[D]')dtype 将负责将字符串和整数转换为“Y”类型。
    【解决方案2】:

    只需将np.timedelta64(1, 'M') 切换为np.timedelta64(1, 'D')

    【讨论】:

    • 这只会给出这些日期之间的每一天的范围(['1990-01-01', '1990-01-02', '1990-01-03'...]。我正在寻找结果 ['1990-01-01', '1990-02-01', '1990-03-01'...]
    • np.arange(...np.timedelta64(1, 'M'), dtype='datetime64[M]').astype('datetime64[D]') 可以吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多