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

Convert existing datetime array to date

我有一列日期。我想计算数组中每个日期时间和指定日期之间的天数。

1
2
import datetime    
print(mydates[0])

2013年4月30日t20:00:00.000000000-0400

1
2
3
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()转换为日期,但我不知道在现有的日期时间集上如何使用它。

这是链接


无论您使用的是什么numpy类型(大概是np.datetime64),datetime模块中的类型都不能隐式转换。

但它们是显式可转换的,这意味着您需要做的就是显式转换:

1
2
3
4
>>> 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值和day单位;从您的输出来看,看起来您使用的是纳秒单位。但一般情况下也是如此。)

如果你真的想把数组转换成一个datetime.date对象数组,你可以……但这可能是个坏主意。当您使用本机numpy类型时,您的数组既紧凑又快速;当您存储一般的python类型时,数组并不比普通的python列表更好,而且它更容易误导您,而不是假装它是有用的。

如果您解释了您实际要做的事情,那么有人可能会解释一种比转换为date对象数组更好的方法。