Si te encuentras con alguna parte que no comprendes nos puedes dejar un comentario y te responderemos lo más rápido posible.
Solución:
Encuentro que los siguientes trucos dan un aumento de velocidad de entre 2x y 4x en comparación con el método pandas descrito anteriormente (es decir, pd.DatetimeIndex(dates).year
etc.). la velocidad de [dt.year for dt in dates.astype(object)]
Encuentro que es similar al método pandas. Además, estos trucos se pueden aplicar directamente a ndarrays de cualquier forma (2D, 3D, etc.)
dates = np.arange(np.datetime64('2000-01-01'), np.datetime64('2010-01-01'))
years = dates.astype('datetime64[Y]').astype(int) + 1970
months = dates.astype('datetime64[M]').astype(int) % 12 + 1
days = dates - dates.astype('datetime64[M]') + 1
Como datetime no es estable en numpy, usaría pandas para esto:
In [52]: import pandas as pd
In [53]: dates = pd.DatetimeIndex(['2010-10-17', '2011-05-13', "2012-01-15"])
In [54]: dates.year
Out[54]: array([2010, 2011, 2012], dtype=int32)
Pandas usa numpy datetime internamente, pero parece evitar la escasez que numpy tiene hasta ahora.
Debería haber una manera más fácil de hacer esto, pero, dependiendo de lo que intente hacer, la mejor ruta podría ser convertir a un objeto de fecha y hora de Python normal:
datetime64Obj = np.datetime64('2002-07-04T02:55:41-0700')
print datetime64Obj.astype(object).year
# 2002
print datetime64Obj.astype(object).day
# 4
Según los comentarios a continuación, parece que esto solo funciona en Python 2.7.x y Python 3.6+
Si te gusta el tema, eres capaz de dejar un artículo acerca de qué te ha impresionado de esta noticia.