2014-09-02 127 views
0

我有一列日期。我想计算数组中每个日期时间与指定日期之间的天数。将现有的日期时间数组转换为日期

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

Here is the link

+0

”我发现另一篇文章将datetime.datetime.now()转换为日期,但我不知道在现有日期时间内如何使用该语法。“那么,请链接到其他帖子,向我们展示它使用的语法以及您尝试应用相同内容的位置,不要只告诉我们它存在。 – abarnert 2014-09-02 19:20:57

+0

http://stackoverflow.com/questions/3743222/how-do-i-convert-datetime-to-date-in-python – Chris 2014-09-02 19:22:03

+0

如果我插入我的变量代替.now()在链接的答案中在它上面不起作用 – Chris 2014-09-02 19:23:10

回答

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值;从输出,它看起来像你使用毫微秒为单位,但同样普遍适用。)


如果你真的想将数组转换成数组对象,你可以 ...但这可能是一个坏主意。当你使用本地numpy类型时,你的数组是紧凑和快速的;当你存储一般的Python类型时,数组并不比普通的Python列表更好,而且它更容易让人误解,而不是冒充其他地方。

如果你解释了你实际要做的事情,有人可能会解释一个更好的方法来做到这一点,而不是转换为date对象的数组。 “

+0

谢谢,这是非常有用和信息。我有一个有8栏股票价格的熊猫数据框,日期时间栏被用作索引。每列都有不同的“事件日期”。我想计算每一列事件日期之间的天数,然后将股票价格数据合并为“自事件发生后的日子”,以便我可以比较每个公司事件发生前后的价格变化。 – Chris 2014-09-02 19:38:16

+0

@Chris:我不确定你在问什么。 (请尝试发布[MCVE](http:// stackoverflow。com/help/mcve),几行自包含代码创建你想要的值,并显示你希望得到的输出以及你坚持得到它的地方。)如果你只是想从一个数据中减去一个日期日期时间索引,只需减去。如果要将日期时间索引转换为仅限日期的索引(您计算整天而不是部分天数),则可能需要'astype'或其他转换函数,或者可能只需从现有数据库中创建新的DataFrame一。 – abarnert 2014-09-02 20:15:04