preloader

Series temporales con pandas

Índice de contenido

Pandas cuenta con un gran número de funcionalidades para trabajar con datos de fechas y horas. En general, hay cuatro conceptos que es importante tener en cuenta:

  • Date time (clase Timestamp): una fecha y hora específicas con una zona horaria especificada. Similar a datetime.datetime de la librería estándar de Python.
  • Time delta (clase Timedelta): un periodo de tiempo absoluto (la diferencia entre un momento temporal concreto y otro diferente). Similar a datetime.timedelta de la librería estándar de Python.
  • Time span (clase Period): un intervalo de tiempo definido por un punto en el tiempo y su frecuencia asociada.
  • Date offset (clase DateOffset): un espacio de tiempo relativo que respeta la aritmética del calendario.

Cuando una Serie o un DataFrame tiene una variable de datos temporales, lo normal es convertir esta variable en el índice de la Serie o el DataFrame. Así, es posible manipular los datos en base a dicha variable temporal.

Date time: momentos puntuales

Cómo generar un dato

pd.Timestamp()

Para hacer referencia a un momento puntual en el tiempo, utilizamos la clase pandas.Timestamp(). ¿Cuáles son sus parámetros más importantes?

  • ts_input: puede ser un objeto de tipo datetime, str, int o float.
  • tz=None: indica la zona horaria y puede ser de tipo str o DateOffset.
  • unit=None: si en ts_input se introduce un valor de tipo int o float, el parámetro permite especificar sus unidades. Los valores válidos son ‘D’, ‘h’, ‘m’, ‘s’, ‘ms’, ‘us’ y ‘ns’.
  • year=None: puede ser de tipo int.
  • month=None: puede ser de tipo int.
  • day=None: puede ser de tipo int.
  • hour=None: puede ser de tipo int, es opcional y por defecto es 0.
  • minute=None: puede ser de tipo int, es opcional y por defecto es 0.
  • second=None: puede ser de tipo int, es opcional y por defecto es 0.
  • microsecond=None: puede ser de tipo int, es opcional y por defecto es 0.
  • nanosecond=None: puede ser de tipo int, es opcional y por defecto es 0.

Es el equivalente de datetime.datetime de Python y es intercambiable con él en la mayoría de los casos.

python
import datetime
python
datetime.datetime(2020, 8, 1)
datetime.datetime(2020, 8, 1, 0, 0)
python
import pandas as pd
python
pd.Timestamp(year = 2020, month = 8, day = 1)
Timestamp('2020-08-01 00:00:00')
python
pd.Timestamp(2020, 8, 1)
Timestamp('2020-08-01 00:00:00')
python
pd.Timestamp("2020-8-1")
Timestamp('2020-08-01 00:00:00')

pd.to_datetime()

python
pd.to_datetime("2020-8-1")
Timestamp('2020-08-01 00:00:00')

Cómo generar un índice

pd.DatetimeIndex()

python
dates = [pd.Timestamp(2020, 8, 1),
        pd.Timestamp(2020, 8, 2),
        pd.Timestamp(2020, 8, 3)]
dates
[Timestamp('2020-08-01 00:00:00'),
 Timestamp('2020-08-02 00:00:00'),
 Timestamp('2020-08-03 00:00:00')]
python
pd.DatetimeIndex(dates)
DatetimeIndex(['2020-08-01', '2020-08-02', '2020-08-03'], dtype='datetime64[ns]', freq=None)

pd.date_range()

Sintaxis esencial:

pandas.date_range(start=None, end=None, periods=None, freq=None)

python
df_index = pd.date_range(start='2020-08-01',
             periods = 50,
             freq = "D")
python
df_index
DatetimeIndex(['2020-08-01', '2020-08-02', '2020-08-03', '2020-08-04',
               '2020-08-05', '2020-08-06', '2020-08-07', '2020-08-08',
               '2020-08-09', '2020-08-10', '2020-08-11', '2020-08-12',
               '2020-08-13', '2020-08-14', '2020-08-15', '2020-08-16',
               '2020-08-17', '2020-08-18', '2020-08-19', '2020-08-20',
               '2020-08-21', '2020-08-22', '2020-08-23', '2020-08-24',
               '2020-08-25', '2020-08-26', '2020-08-27', '2020-08-28',
               '2020-08-29', '2020-08-30', '2020-08-31', '2020-09-01',
               '2020-09-02', '2020-09-03', '2020-09-04', '2020-09-05',
               '2020-09-06', '2020-09-07', '2020-09-08', '2020-09-09',
               '2020-09-10', '2020-09-11', '2020-09-12', '2020-09-13',
               '2020-09-14', '2020-09-15', '2020-09-16', '2020-09-17',
               '2020-09-18', '2020-09-19'],
              dtype='datetime64[ns]', freq='D')
python
pd.DataFrame(range(50),
            index = df_index)

0
2020-08-010
2020-08-021
2020-08-032
2020-08-043
2020-08-054
2020-08-065
2020-08-076
2020-08-087
2020-08-098
2020-08-109
2020-08-1110
2020-08-1211
2020-08-1312
2020-08-1413
2020-08-1514
2020-08-1615
2020-08-1716
2020-08-1817
2020-08-1918
2020-08-2019
2020-08-2120
2020-08-2221
2020-08-2322
2020-08-2423
2020-08-2524
2020-08-2625
2020-08-2726
2020-08-2827
2020-08-2928
2020-08-3029
2020-08-3130
2020-09-0131
2020-09-0232
2020-09-0333
2020-09-0434
2020-09-0535
2020-09-0636
2020-09-0737
2020-09-0838
2020-09-0939
2020-09-1040
2020-09-1141
2020-09-1242
2020-09-1343
2020-09-1444
2020-09-1545
2020-09-1646
2020-09-1747
2020-09-1848
2020-09-1949

Time delta: periodos de tiempo

Cómo generar un dato

pd.Timedelta()

python
pd.Timedelta(days = 1, seconds = 2)
Timedelta('1 days 00:00:02')
python
pd.Timedelta("1 days")
Timedelta('1 days 00:00:00')
python
pd.Timedelta("1 days 2 seconds")
Timedelta('1 days 00:00:02')

pd.to_timedelta()

python
pd.to_timedelta("1 days 2 seconds")
Timedelta('1 days 00:00:02')

Cómo generar un índice

pd.TimedeltaIndex()

python
tdeltas = [pd.Timedelta("1 days"),
          pd.Timedelta("2 days"),
          pd.Timedelta("3 days")]
tdeltas
[Timedelta('1 days 00:00:00'),
 Timedelta('2 days 00:00:00'),
 Timedelta('3 days 00:00:00')]
python
pd.TimedeltaIndex(tdeltas)
TimedeltaIndex(['1 days', '2 days', '3 days'], dtype='timedelta64[ns]', freq=None)

pd.timedelta_range()

python
tdelta_index = pd.timedelta_range("1 days", periods = 3, freq = "D")
python
tdelta_index
TimedeltaIndex(['1 days', '2 days', '3 days'], dtype='timedelta64[ns]', freq='D')
python
pd.DataFrame(["Cad1", "Cad2", "Cad3"],
            index = tdelta_index)

0
1 daysCad1
2 daysCad2
3 daysCad3
comments powered by Disqus