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

Python 将现有日期时间数组转换为日期,python,datetime,Python,Datetime,我有一列日期。我想计算数组中每个datetime与指定日期之间的天数 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与指定日期之间的天数

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')
打印(mydates[0]-datetime.date(2013,9,20))

TypeError:ufunc subtract不能使用类型为dtype(“您正在使用的任何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列表好多少,而且假装数组更容易误导d否则


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

“我发现另一篇文章将datetime.datetime.now()转换成日期,但我不知道在现有的日期时间集上如何使用这种语法。”那么,请链接到另一篇文章,并向我们展示它使用的语法,以及在尝试应用相同的东西时遇到的困难,不要只告诉我们它存在在上面链接的答案中,它不起作用,这篇文章是关于在
datetime.datetime
datetime.date
之间转换的,而不是关于在
numpy.datetime64
datetime.date
之间转换,或者你正在使用的任何类型。(您的问题确实需要更多的信息才能清楚地回答,请给我们一个简单的示例,它创建了一个由两个值组成的
mydates
数组,其中两个值是您使用的任何类型,而不只是向我们显示打印一个值的输出。)谢谢,这真的很有用,信息丰富。我有一个pandas数据框,有8列股票价格,datetimes列用作索引。每列都有不同的“事件日期”。我想计算每列事件日期之间的天数,然后按“事件发生后的天数”合并股票价格数据,以便比较价格在每次公司活动前后的日子里都会发生变化。@Chris:我不知道你在问什么。(请尝试发布一个,几行自包含的代码,创建你想要的值,并显示你希望得到什么输出以及在哪里得到它。)如果您只想从日期时间索引中减去日期,只需减去。如果您想将日期时间索引转换为仅日期索引(您计算的是整天,而不是部分天),您可能需要
astype
或其他一些转换函数,或者只需要从现有的数据框中创建一个新的数据框。