设置场景:我有一个dtype int64的Series对象。我需要将这些转换为只带日期的datetime对象(不包括小时和秒)
我现在要做的是。。。在
在元首()=0 1382400000
1 1382400000
2 1382054400
3 1381708800
4 1380758400
Name: da_0, dtype: int64
此功能:
^{pr2}$
当我处理相关系列时,我会打电话给:foo = foo.apply(lambda x: convert_stamp_to_date(x))
这给了我正确的解决方案:0 2013-10-22 00:00:00
1 2013-10-22 00:00:00
2 2013-10-18 00:00:00
3 2013-10-14 00:00:00
4 2013-10-03 00:00:00
Name: da_0, dtype: datetime64[ns]
这给了我想要的,但是我发现它很慢(应该是这样,对吧?因为这只是一种幼稚的工作方式)。在
对于长度为~5000的小系列对象,平均需要~27ms进行转换。不好。坏。。。但是,我可以很容易地得到一系列对象,这些对象可以增长到数百万行。对于这些,我看到转换时间在1-2分钟范围内。和我用同样大小的序列和数据帧做的其他事情相比,这似乎太慢了。在
我的第一个想法是尝试使用np.vectorize对函数进行伪矢量化。然而,这实际上使转换速度慢了10倍。在vconvert_stamp_to_date = np.vectorize(convert_stamp_to_date)
foo = foo.apply(lambda x: vconvert_stamp_to_date(x))
虽然这仍然给了我正确的答案,但它将较小系列对象的转换时间提高到350毫秒左右,而对于我使用的较大系列对象,我不得不在脚本中按ctrl+c组合键,因为它花费的时间太长。在
将时间戳转换为datetime对象会成为程序的瓶颈,这对我来说似乎有点可笑:(我必须相信,在某些地方有一种更有效的方法来实现这一点)。谁能给我指一下正确的方向吗?目前,我已经耗尽了我所有的熊猫法力。如果你一直读到这里,我很感激。在
谢谢。在