将现有的日期时间数组转换为日期

0 投票
1 回答
8334 浏览
提问于 2025-04-19 10:52

我有一列日期。我想计算这些日期和一个指定日期之间的天数。

import datetime    
print(mydates[0])

2013-04-30T20:00:00.000000000-0400

print(mydates[0] - datetime.date(2013,9,20))

TypeError: ufunc subtract cannot use operands with types dtype('<M8[ns]') and dtype('O')

我需要创建一个数组,里面存放这些日期之间的天数。不过更一般来说,我还需要知道怎么把一组日期时间转换成只有日期的格式。

我找到了一篇帖子,里面讲了怎么把当前的日期时间(datetime.datetime.now())转换成日期,但我不知道怎么用这种语法来处理我已有的日期时间。

这是链接

1 个回答

1

不管你使用的是哪种numpy类型(大概是np.datetime64),它和datetime模块里的类型是不能自动转换的。

不过,它们是可以手动转换的,这意味着你只需要进行明确的转换:

>>> mydates[0] - np.datetime64(datetime.date(2013,9,20))
numpy.timedelta64(-1,'D')
>>> mydates - np.datetime64(datetime.date(2013,9,20))
array([-1, 0, -152], dtype='timedelta64['D'])

(注意,这里提到的'D'是因为我使用的是以天为单位的datetime值;从你的输出看,你似乎在使用纳秒单位。但一般来说,都是适用的。)


如果你真的想把数组转换成datetime.date对象的数组,你是可以这样做的……但这可能不是个好主意。当你使用原生的numpy类型时,你的数组是紧凑且快速的;而当你存储普通的Python类型时,数组的表现就和普通的Python列表差不多,这样做反而会让人误解。

如果你能解释一下你实际想做什么,可能会有人给你提供比转换成date对象数组更好的方法。

撰写回答