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-01 | 0 |
| 2020-08-02 | 1 |
| 2020-08-03 | 2 |
| 2020-08-04 | 3 |
| 2020-08-05 | 4 |
| 2020-08-06 | 5 |
| 2020-08-07 | 6 |
| 2020-08-08 | 7 |
| 2020-08-09 | 8 |
| 2020-08-10 | 9 |
| 2020-08-11 | 10 |
| 2020-08-12 | 11 |
| 2020-08-13 | 12 |
| 2020-08-14 | 13 |
| 2020-08-15 | 14 |
| 2020-08-16 | 15 |
| 2020-08-17 | 16 |
| 2020-08-18 | 17 |
| 2020-08-19 | 18 |
| 2020-08-20 | 19 |
| 2020-08-21 | 20 |
| 2020-08-22 | 21 |
| 2020-08-23 | 22 |
| 2020-08-24 | 23 |
| 2020-08-25 | 24 |
| 2020-08-26 | 25 |
| 2020-08-27 | 26 |
| 2020-08-28 | 27 |
| 2020-08-29 | 28 |
| 2020-08-30 | 29 |
| 2020-08-31 | 30 |
| 2020-09-01 | 31 |
| 2020-09-02 | 32 |
| 2020-09-03 | 33 |
| 2020-09-04 | 34 |
| 2020-09-05 | 35 |
| 2020-09-06 | 36 |
| 2020-09-07 | 37 |
| 2020-09-08 | 38 |
| 2020-09-09 | 39 |
| 2020-09-10 | 40 |
| 2020-09-11 | 41 |
| 2020-09-12 | 42 |
| 2020-09-13 | 43 |
| 2020-09-14 | 44 |
| 2020-09-15 | 45 |
| 2020-09-16 | 46 |
| 2020-09-17 | 47 |
| 2020-09-18 | 48 |
| 2020-09-19 | 49 |
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 days | Cad1 |
| 2 days | Cad2 |
| 3 days | Cad3 |
