【发布时间】:2018-04-08 16:19:45
【问题描述】:
给定一个形状为(n, 2)的日期时间数组:
x = np.array([['2017-10-02T00:00:00.000000000', '2017-10-12T00:00:00.000000000']], dtype='datetime64[ns]')
x 的形状为(1, 2),但实际上它可能是(n, 2)、n >= 1。在每一对中,第一个日期总是小于(或等于)第二个日期。我想获取x 中每对日期之间所有日期范围的列表。这就是我基本上正在做的事情:
np.concatenate([pd.date_range(*y, closed='right') for y in x])
它有效,给予
array(['2017-10-03T00:00:00.000000000', '2017-10-04T00:00:00.000000000',
'2017-10-05T00:00:00.000000000', '2017-10-06T00:00:00.000000000',
'2017-10-07T00:00:00.000000000', '2017-10-08T00:00:00.000000000',
'2017-10-09T00:00:00.000000000', '2017-10-10T00:00:00.000000000',
'2017-10-11T00:00:00.000000000', '2017-10-12T00:00:00.000000000'], dtype='datetime64[ns]')
但这很慢,因为列表比较 - 它没有像我想要的那样完全矢量化。我想知道是否有更好的方法来获取多对日期的日期范围?
我会根据需要提供尽可能多的说明。谢谢。
【问题讨论】:
-
Np.arange 适用于 datetime64 值
-
@hpaulj 太棒了
np.concatenate([np.arange(row[0], row[1] + 1) for row in x.astype('datetime64[D]')]).astype('datetime64[ns]')
标签: python performance pandas numpy datetime