Libraries
Jupyter
Data Science
Como Manejar El Tiempo Con Pandas
Pandas nos provee el soporte y las herramientas para manejar datos de forma general. En esta ocasión hablaremos de cómo manejar datos de tipo time con pandas. Para ello, nos guiaremos de los ítems que seguiremos a continuación.Los conceptos básicos que Pandas hace referencia acerca del tiempo. Estos pueden listarse en 4 conceptos generales tales como Date times,Time deltas,Time spans y Date offset.Aplicaremos ejemplos básicos de los 4 conceptos anteriormente mencionados. Aplicaremos estos conceptos en Series y DataFrames de Pandas. Es muy importante definir o tener una idea de que trata cada concepto. Para esto, podemos resumir cada uno de ellos de la siguiente manera:Date times: Este está compuesto por fecha y tiempo y es de clase Timestamp cuando es un solo valor. Por otro lado, si es un array the Datetimes este sería de clase DatetimeIndex. Time deltas: Este almacena un rango de tiempo, el cual puede servir para hacer algunas operaciones con los Datetimes. De igual forma, si es un solo valor sería de clase Timedelta o si es un array sería de clase TimedeltaIndex. Time spans: Estos están asociados a los periodos y frecuencias que podemos definir dentro de Pandas. Así mismo, la clase sería Period si es un sólo valor. De otra manera, sería PeriodIndex para un array de valores.Date offset: Este se podría asemejar al Time deltas, donde almacena una porción de tiempo que puede ser utilizado para operaciones aritméticas según el calendario.Como podemos observar, muchos de estos datos manejan la clase Index cuando están agrupados en un array. Esto será muy útil a la hora de indexar una Serie o DataFrame de pandas. Los conceptos anteriormente mencionados pueden ser resumidos en la siguiente tabla. Date time:Como primer paso crearemos variables con los métodos to_datetime y date_range. Después, miraremos de qué clase son y cómo podemos aplicarlos a las Series y DataFrames. Importamos Pandas y Numpy:Creamos nuestra variable fecha con nuestro método to_datetime. También, es importante saber que este método recibe una fecha o un array de fechas y/u otro tipo de argumentos.Como podemos ver fecha es de tipo Timestamp. Sin embargo, también podemos observar que la fecha no fue mostrada en el orden en que la pasamos. Ya que el mes 07 , se muestra como dia 07. Para darle un orden a nuestros argumentos, podemos usar format.También, podemos usar argumentos como today.Así mismo, array de Datetimes como argumentos. En el output posterior, podemos observar que ahora la clase es Datetime Index debido que pasamos como argumento el array. Este misma clase también puede ser generada cuando usamos date_range como método.Este método nos permite originar un array de Datetimes. También, podemos ver que recibe como argumento el periodo y por defecto toma la frecuencia por dia. Esta puede ser cambiada por intervalos de meses, días, horas , segundos y microsegundos etc. Adicionalmente, podemos cambiar el timezone. Ahora coloquemos este array en una series de pandas. Si queremos cambiar la frecuencia y de paso agregarle el promedio del resultado, podemos hacerlo como sigue a continuación.Por otro lado, podemos aplicar esto a un DataFrame como sigue abajo.Time Deltas:Supongamos que queremos agregar cierto valor de tiempo al Timestamp de fecha.Para ello usaremos el Timedelta como sigue a continuación. Podemos pasar como argumento los días e incluso minutos y segundos.Otra forma de agregar cierto valor de tiempo es con Dateoffset como se había mencionado anteriormente. En este ocasión crearemos una series de Dateoffsets. Luego sumaremos un array de Datetime y veremos el resultado de esta operación.El primer objeto de Dateoffset tiene un incremento de 1 y el segundo de 2 respectivamente. Veremos que por default este valor es representado solo por el offset del dia.Como resultado obtenemos la suma de un dia para el primer array de Datetime y la suma de 2 días para el segundo array de Datetime. De igual forma, podemos hacerlo para meses, días, horas, minutos y segundos. Time spans:En este caso hablaremos del método Period_range, el cual nos puede servir para crear un array Periodindex pasando como argumento el periodo y la frecuencia como antes visto. También, podemos crear Series a partir de este Periodindex.Por otro lado, podemos crear nuestro propio PeriodIndex.Por último si queremos tan solo un valor representado en Period también se puede obtener de la siguiente forma.Finalmente, podemos concluir que existen diversas clases para manejar el tiempo tales como Datetime, Timedeltas, Timespans y Dateoffsets. Podemos usar cada una de ellas y sus combinaciones para operar con Series y DataFrames. Como referencia podemos ver la documentación de Pandas para Time series / date functionality en el siguiente link.
Danilo Galindo
May 22, 2020