日期格式是个问题,01/01/2015是不明确的,如果它是在ISO 8601中,你可以直接用numpy解析它,在你的例子中,因为你只需要日期,那么拆分和重新排列数据的速度将大大加快:t = np.array([datetime.strptime(d.split(None)[0], "%d/%m/%Y")
for d in t],dtype='datetime64[us]').astype('datetime64[D]')
一些计时,解析后首先重新排列:
^{pr2}$
您的代码:In [37]: %%timeit
from datetime import datetime
t = np.array(['21/02/2014 08:40:00 AM', '11/02/2014 10:50:00 PM',
'07/04/2014 05:50:00 PM', '17/02/2014 10:20:00 PM',
'07/03/2014 06:10:00 AM', '02/03/2014 12:25:00 PM',
'05/02/2014 03:20:00 AM', '31/01/2014 12:30:00 AM',
'28/02/2014 01:25:00 PM']*10000)
t = [datetime.strptime(tt,"%d/%m/%Y %H:%M:%S %p") for tt in t]
t = np.array(t,dtype='datetime64[us]').astype('datetime64[D]')
....:
1 loops, best of 3: 1.56 s per loop
两种方法得出的结果完全不同:In [48]: t = np.array(['21/02/2014 08:40:00 AM', '11/02/2014 10:50:00 PM',
'07/04/2014 05:50:00 PM', '17/02/2014 10:20:00 PM',
'07/03/2014 06:10:00 AM', '02/03/2014 12:25:00 PM',
'05/02/2014 03:20:00 AM', '31/01/2014 12:30:00 AM',
'28/02/2014 01:25:00 PM'] * 10000)
In [49]: t1 = [datetime.strptime(tt,"%d/%m/%Y %H:%M:%S %p") for tt in t]
t1 = np.array(t1,dtype='datetime64[us]').astype('datetime64[D]')
....:
In [50]: t2 = np.array([np.datetime64("{}-{}-{}".format(c[:4], b, a)) for a, b, c in (s.split("/", 2) for s in t)])
In [51]: (t1 == t2).all()
Out[51]: True