es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo convertir correctamente una marca de tiempo de UNIX a un objeto pd.Timestamp mediante pandas?

Encontré una inconsistencia en cómo pandas convierte las marcas de tiempo UNIX a objetos de fecha y hora de python:

d = datetime.datetime.utcnow()

timestamp = d.timestamp()

assert datetime.datetime.fromtimestamp(timestamp) == d

assert pd.to_datetime(timestamp, unit="s").to_pydatetime() == d

La primera afirmación es correcta, mientras que la segunda falla. Pandas está convirtiendo la marca de tiempo UTC a mi zona horaria local.

Es difícil creer que esto sea un error, ¿entonces qué estoy haciendo mal?

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hola,

    No estás haciendo nada mal. Por defecto, pandas asume que las marcas de tiempo proporcionadas en segundos (unit=”s”) están en la zona horaria local, no en UTC. Este comportamiento se puede cambiar pasando el argumento opcional tz=”UTC” a pd.to_datetime(), de la siguiente manera:

    import pandas as pd
    from datetime import datetime
    
    d = datetime.utcnow()
    timestamp = d.timestamp()
    
    assert datetime.fromtimestamp(timestamp) == d
    assert pd.to_datetime(timestamp, unit="s", tz="UTC").to_pydatetime() == d
    

    Alternativamente, podrías convertir el objeto de fecha y hora de pandas de nuevo a la zona horaria UTC, llamando al método .tz_localize(“UTC”) en el resultado:

    import pandas as pd
    from datetime import datetime
    
    d = datetime.utcnow()
    timestamp = d.timestamp()
    
    assert datetime.fromtimestamp(timestamp) == d
    assert pd.to_datetime(timestamp, unit="s").tz_localize("UTC").to_pydatetime() == d
    

    Espero que esto ayude. Avísame si tienes alguna pregunta adicional.

    Saludos cordiales.

Comments are closed.