HOWTO · NumPy
Cómo convertir entre `datetime.datetime`, `np.datetime64` y `pd.Timestamp`
Este artículo explica cómo convertir datos entre `datetime.datetime`, `np.datetime64` y `pd.Timestamp`.
En esta página
Al convertir entre datetime.datetime, np.datetime64 y pd.Timestamp, use el constructor del tipo de destino. Los ejemplos siguientes usan valores sin zona horaria: representan fechas y horas de calendario sin información de zona horaria. Elija la sección que corresponda al tipo de origen. Los valores de fecha y hora de NumPy pueden usar unidades más precisas que la resolución de microsegundos de Python, por lo que convertirlos a Python puede ocasionar una pérdida de precisión. La información de zona horaria también requiere un tratamiento explícito, ya que np.datetime64 no almacena una zona horaria.
Convertir datetime.datetime a np.datetime64 o pd.Timestamp
Pase una instancia de fecha y hora de Python al constructor del tipo de destino. Este ejemplo incluye una fracción de segundo para mostrar que los constructores conservan el valor de microsegundos en estas entradas sin zona horaria.
Ejecute este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import datetime
import numpy as np
import pandas as pd
dt = datetime.datetime(2018, 10, 24, 4, 3, 10, 7199)
print(np.datetime64(dt))
print(pd.Timestamp(dt))
La entrada no tiene zona horaria, y ninguno de los resultados debe interpretarse como UTC solo por la forma en que se muestra. Si el origen sí incluye una zona horaria, decida cómo normalizarla o conservarla antes de convertir a un tipo que no pueda almacenar esa información. pd.Timestamp puede representar valores con zona horaria, mientras que un valor datetime64 de NumPy no tiene zona horaria.
Convertir np.datetime64 a datetime.datetime o pd.Timestamp
Construya un pd.Timestamp directamente a partir del escalar de NumPy. Para obtener un objeto de fecha y hora de Python, primero convierta el valor de NumPy a una resolución de microsegundos y luego convierta ese escalar a datetime.datetime:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import datetime
import numpy as np
import pandas as pd
dt64 = np.datetime64("2017-10-24T05:34:20.123456", "us")
python_dt = dt64.astype("datetime64[us]").astype(datetime.datetime)
pandas_ts = pd.Timestamp(dt64)
print(python_dt)
print(pandas_ts)
La unidad explícita us deja clara la resolución de microsegundos de la conversión a Python. Si el valor de NumPy tiene una precisión superior a la de microsegundos, la conversión a Python no puede conservar los dígitos adicionales; elija y documente la precisión que necesita antes de convertirlo. pd.Timestamp resulta útil si necesita un escalar de pandas, que puede representar una precisión mayor que la fecha y hora integrada de Python. Ni un valor de NumPy sin zona horaria ni un objeto de fecha y hora de Python sin zona horaria identifican una zona horaria. Por eso, no use una conversión de época que asigne UTC de forma implícita, salvo que esa sea realmente la interpretación que pretende.
Convertir pd.Timestamp a datetime.datetime o np.datetime64
Use to_pydatetime() para obtener un objeto de fecha y hora de Python y to_datetime64() para obtener un escalar de NumPy. Este ejemplo usa un valor con precisión de microsegundos, que ambos tipos de destino pueden representar:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
ts = pd.Timestamp("2017-10-24 04:24:33.654321")
print(ts.to_pydatetime())
print(ts.to_datetime64())
Un objeto de fecha y hora de Python almacena microsegundos, por lo que el resultado de Python no puede representar ningún componente de nanosegundos adicional de un Timestamp. El resultado de NumPy conserva una unidad y una precisión de fecha y hora, pero no una zona horaria. Para las marcas de tiempo que sí incluyen zona horaria, decida explícitamente si las convertirá a UTC o eliminará la información de zona horaria antes de pasarlas a una representación que no la admite. Use to_pydatetime() cuando el código Python posterior requiera el tipo de la biblioteca estándar y to_datetime64() cuando requiera el escalar de fecha y hora de NumPy.