【问题标题】:Numpy arange with spesific datetime given by month interval具有按月间隔给出的特定日期时间的 Numpy 范围
【发布时间】:2020-03-28 13:26:21
【问题描述】:

我想制作按月间隔给出的日期时间数组。如果我像这样使用天数作为间隔,这很容易

xyz = np.arange(np.datetime64('2020-03-24'), 3)
xyz

输出

array(['2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[D]')

它只会增加 3 dyas。 3个月怎么样?我已经尝试过这种方式并出现错误

np.arange(datetime('2020-03-28'), np.timedelta64(3,'M'))

我试过这个结果错误

np.arange(np.datetime64("2020-03-24"), np.datetime64("2020-06-24"), 
          np.timedelta64(1, 'M'), 
          dtype='datetime64[M]').astype('datetime64[D]')

输出

array(['2020-03-01', '2020-04-01', '2020-05-01'], dtype='datetime64[D]')

【问题讨论】:

    标签: arrays numpy datetime date-range


    【解决方案1】:

    没有dtypearange 会引发错误:

    In [91]: x = np.arange(np.datetime64("2020-03-24"), np.datetime64("2020-06-24"),  
        ...:           np.timedelta64(1, 'M'))                                                     
    ...
    TypeError: Cannot get a common metadata divisor for NumPy datetime metadata [M] and [D] because they have incompatible nonlinear base time units
    

    以一个月为单位不等于以n天为单位。

    使用数据类型:

    In [85]: x = np.arange(np.datetime64("2020-03-24"), np.datetime64("2020-06-24"),  
        ...:           np.timedelta64(1, 'M'),  
        ...:           dtype='datetime64[M]')                                                      
    In [86]: x                                                                                     
    Out[86]: array(['2020-03', '2020-04', '2020-05'], dtype='datetime64[M]')
    

    端点已转换为月份(没有任何隐含的日期)。

    请注意,差异是预期的1 month

    In [87]: np.diff(x)                                                                            
    Out[87]: array([1, 1], dtype='timedelta64[M]')
    

    如果我将日期转换为 D dtype,它会选择月初:

    In [89]: x.astype('datetime64[D]')                                                             
    Out[89]: array(['2020-03-01', '2020-04-01', '2020-05-01'], dtype='datetime64[D]')
    

    日期时间增量不再统一:

    In [90]: np.diff(x.astype('datetime64[D]'))                                                    
    Out[90]: array([31, 30], dtype='timedelta64[D]')
    

    ===

    您可以添加适当的 timedelta,而不是 astype

    In [96]: x + np.array(3, 'timedelta64[D]')                                                     
    Out[96]: array(['2020-03-04', '2020-04-04', '2020-05-04'], dtype='datetime64[D]')
    

    【讨论】:

    • 谢谢回答,x 是 3 月 24 日,但在最后的结果中,它给出了每个月的第 4 天。有什么建议吗?
    • 那是因为我添加了一个 3 天的增量。选择你自己的。
    猜你喜欢
    • 2011-03-02
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多