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()转换为日期,但我不知道在现有的日期时间集上如何使用它。
这是链接
- "我找到了另一篇文章,它将datetime.datetime.now()转换为日期,但我不知道在现有的日期时间集上如何使用它。"那么,请链接到另一篇文章,并向我们展示它使用的语法以及您尝试应用相同内容时遇到的困难,不要仅仅告诉我们它存在。
- stackoverflow.com/questions/3743222/&hellip;
- 如果我在上面链接的答案中插入变量来代替.now(),它就不起作用了
- 好吧,那篇文章是关于datetime.datetime和datetime.date之间的转换,而不是关于numpy.datetime64和datetime.date之间的转换,或者你正在使用的任何类型。(你的问题确实需要更多的信息来回答清楚地给我们一个mcve,例如,一个简单的例子,创建一个由两个值组成的mydates数组,不管你使用的是什么类型的值,而不仅仅是显示一个输出。)
无论您使用的是什么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对象数组更好的方法。
- 谢谢,这真的很有帮助,也很有用。我有一个熊猫数据框架,有8列股票价格,日期时间列作为索引。每列都有不同的"事件日期"。我想计算每列事件日期之间的天数,然后按"事件发生后的天数"合并股价数据,以便比较每个公司事件发生前后的价格变化。
- @克里斯:我不知道你在问什么。(请尝试发布一个mcve,几行独立的代码,创建您想要的值,并显示您希望的输出以及在哪里获取它。)如果您只想从日期时间索引中减去一个日期,只需减去。如果要将日期时间索引转换为仅日期索引(计算全天而不是部分天数的索引),可能需要astype或其他转换函数,或者只需要从现有的转换函数创建新的数据帧。