Manipulación de Fechas¶
Pandas se desarrolló en el contexto del modelado financiero, por lo que, contiene varias herramientas para trabajar con fechas, horas y datos indexados por tiempo.
Comenzaremos por entendender las herramientas para manejar fechas y horas en Python, antes de pasar más específicamente a las herramientas proporcionadas por Pandas.
Fechas y horas Python¶
Python tiene dos módulos integrados para trabajar con fechas y horas: datetime
y dateutil
.
El módulo datetime
proporciona clases para trabajar con fechas y horas. La clase principal es datetime.datetime
, que combina una fecha y una hora. Por ejemplo, puedes crear un objeto datetime.datetime
con la fecha y hora actual usando la función now()
:
import datetime
now = datetime.datetime.now()
print(now)
2024-06-14 09:46:43.522987
Puedes acceder a partes específicas de un objeto datetime.datetime
, como el año, el mes, el día, la hora, el minuto y el segundo. Algunos de los atributos más comunes son:
year
: representa el año de la fecha y la hora.month
: representa el mes de la fecha y la hora, como un número entre 1 y 12.day
: representa el día del mes de la fecha y la hora, como un número entre 1 y 31.hour
: representa la hora del día de la fecha y la hora, como un número entre 0 y 23.minute
: representa los minutos de la hora de la fecha y la hora, como un número entre 0 y 59.second
: representa los segundos de la hora de la fecha y la hora, como un número entre 0 y 59.microsecond
: representa los microsegundos de la hora de la fecha y la hora, como un número entre 0 y 999999.
from datetime import datetime
# Crear objeto datetime
now = datetime.now()
# Acceder a los atributos
print(now.year)
print(now.month)
print(now.day)
print(now.hour)
print(now.minute)
print(now.second)
print(now.microsecond)
2024 6 14 9 46 43 532612
También puedes crear un objeto datetime.datetime
a partir de una cadena de texto usando la función strptime()
:
from datetime import datetime
# Crear objeto datetime
now = datetime.now()
# Convertir objeto datetime en cadena de texto
# Formato: AAAA-MM-DD
date_string = now.strftime('%Y-%m-%d')
print(date_string)
# Formato: DD/MM/AAAA
date_string = now.strftime('%d/%m/%Y')
print(date_string)
# Formato: AAAA-MM-DD HH:MM:SS
date_string = now.strftime('%Y-%m-%d %H:%M:%S')
print(date_string)
# Formato: DD/MM/AAAA HH:MM
date_string = now.strftime('%d/%m/%Y %H:%M')
print(date_string)
# Formato: Día de la semana, Mes DD, AAAA
date_string = now.strftime('%A, %B %d, %Y')
print(date_string)
2024-06-14 14/06/2024 2024-06-14 09:46:43 14/06/2024 09:46 Friday, June 14, 2024
Algunos de los códigos de formato más comunes son:
%Y
: año con cuatro dígitos.%y
: año con dos dígitos.%m
: mes como número de dos dígitos.%d
: día del mes como número de dos dígitos.%H
: hora en formato de 24 horas con dos dígitos.%I
: hora en formato de 12 horas con dos dígitos.%M
: minutos con dos dígitos.%S
: segundos con dos dígitos.%p
: indicador de AM/PM.
Nota: La lista completa de códigos de formato se puede encontrar en la documentación oficial de Python.
El módulo dateutil
es una extensión del módulo datetime
que proporciona funciones adicionales para trabajar con fechas y horas. Por ejemplo, puedes crear un objeto dateutil.parser.parse()
a partir de una cadena de texto que contenga una fecha y hora, y dateutil.relativedelta.relativedelta()
para calcular la diferencia entre dos fechas:
from dateutil.parser import parse
from dateutil.relativedelta import relativedelta
# funcion parse
date_string = 'February 17, 2022 3:30 PM'
date = parse(date_string)
print(date)
2022-02-17 15:30:00
# diferencia de fechas
date1 = datetime(2022, 2, 17)
date2 = datetime(2022, 3, 17)
delta = relativedelta(date2, date1)
print(delta)
print(delta.months, delta.days)
relativedelta(months=+1) 1 0
Estos son solo algunos ejemplos de cómo puedes trabajar con fechas y horas en Python utilizando los módulos datetime
y dateutil
. Hay muchas más funciones disponibles en estos módulos que pueden ayudarte a trabajar con fechas y horas de manera más avanzada.
Fechas y horas Numpy¶
NumPy es una librería de Python que se enfoca en el procesamiento de matrices y arreglos numéricos. El tipo de datos datetime64
de NumPy permite trabajar con datos de tiempo de manera más eficiente que con las clases datetime
y dateutil
.
El tipo de datos datetime64
es un tipo de datos de fecha y hora nativo de NumPy. datetime64
representa fechas y horas como enteros de 64 bits, donde el número entero representa un número de nanosegundos desde el 1 de enero de 1970. Puedes crear un arreglo datetime64
a partir de una cadena de texto que contenga una fecha y hora usando la función numpy.datetime64()
:
import numpy as np
date_string = '2022-02-17'
date = np.datetime64(date_string)
print(date)
2022-02-17
Puedes crear un rango de fechas usando la función numpy.arange()
con un paso de tiempo de datetime64
:
dates = np.arange('2022-02', '2022-03', dtype='datetime64[D]')
print(dates)
['2022-02-01' '2022-02-02' '2022-02-03' '2022-02-04' '2022-02-05' '2022-02-06' '2022-02-07' '2022-02-08' '2022-02-09' '2022-02-10' '2022-02-11' '2022-02-12' '2022-02-13' '2022-02-14' '2022-02-15' '2022-02-16' '2022-02-17' '2022-02-18' '2022-02-19' '2022-02-20' '2022-02-21' '2022-02-22' '2022-02-23' '2022-02-24' '2022-02-25' '2022-02-26' '2022-02-27' '2022-02-28']
También puedes realizar operaciones aritméticas en objetos datetime64
, como agregar días, meses o años. Por ejemplo:
dates = np.array(['2022-02-17', '2022-02-18', '2022-02-19'], dtype='datetime64')
new_dates = dates + np.timedelta64(1, 'D')
print(new_dates)
['2022-02-18' '2022-02-19' '2022-02-20']
Además, NumPy proporciona funciones para realizar cálculos de fechas y horas, como numpy.busday_count()
, que calcula el número de días hábiles entre dos fechas. Por ejemplo:
start_date = np.datetime64('2022-02-15')
end_date = np.datetime64('2022-02-20')
count = np.busday_count(start_date, end_date)
print(count)
4
Estos son solo algunos ejemplos de cómo puedes trabajar con fechas y horas en NumPy utilizando el tipo de datos datetime64
. NumPy también proporciona muchas más funciones útiles para trabajar con datos de tiempo de manera eficiente.
Fechas y horas Pandas¶
Pandas tiene una amplia variedad de herramientas para trabajar con fechas y horas, incluyendo las clases Timestamp
, DatetimeIndex
, y Period
.
La clase Timestamp
representa una sola fecha y hora. Puedes crear un objeto Timestamp
a partir de una cadena de texto que contenga una fecha y hora usando la función pandas.to_datetime()
:
import pandas as pd
date_string = '2022-02-17'
date = pd.to_datetime(date_string)
print(date)
2022-02-17 00:00:00
La clase DatetimeIndex
es una estructura de datos que contiene una serie de fechas y horas. Puedes crear un objeto DatetimeIndex
a partir de una lista o un rango de fechas usando la función pandas.date_range()
:
dates = pd.date_range('2022-02-01', '2022-02-28')
print(dates)
DatetimeIndex(['2022-02-01', '2022-02-02', '2022-02-03', '2022-02-04', '2022-02-05', '2022-02-06', '2022-02-07', '2022-02-08', '2022-02-09', '2022-02-10', '2022-02-11', '2022-02-12', '2022-02-13', '2022-02-14', '2022-02-15', '2022-02-16', '2022-02-17', '2022-02-18', '2022-02-19', '2022-02-20', '2022-02-21', '2022-02-22', '2022-02-23', '2022-02-24', '2022-02-25', '2022-02-26', '2022-02-27', '2022-02-28'], dtype='datetime64[ns]', freq='D')
La clase Period
representa un período de tiempo, como un mes o un trimestre. Puedes crear un objeto Period
a partir de una cadena de texto que contenga un período de tiempo usando la función pandas.Period()
:
month_string = '2022-02'
month = pd.Period(month_string, freq='M')
print(month)
2022-02
Pandas también proporciona muchas funciones para trabajar con fechas y horas. Por ejemplo, puedes seleccionar filas de un dataframe por fecha y hora utilizando el método loc[]
y especificando una condición booleana:
data = {'date': pd.date_range('2022-02-01', '2022-02-28'), 'value': range(28)}
df = pd.DataFrame(data)
df.set_index('date', inplace=True)
selected = df.loc['2022-02-17':'2022-02-20']
selected
value | |
---|---|
date | |
2022-02-17 | 16 |
2022-02-18 | 17 |
2022-02-19 | 18 |
2022-02-20 | 19 |
También puedes realizar operaciones aritméticas en objetos Timestamp
, DatetimeIndex
y Period
. Por ejemplo, puedes agregar días, meses o años a un objeto Timestamp
usando el método Timestamp + pd.Timedelta()
:
date = pd.to_datetime('2022-02-17')
new_date = date + pd.Timedelta(days=1)
print(new_date)
2022-02-18 00:00:00
Estos son solo algunos ejemplos de cómo puedes trabajar con fechas y horas en Pandas utilizando las clases Timestamp
, DatetimeIndex
y Period
. Pandas también proporciona muchas más funciones útiles para trabajar con datos de tiempo de manera eficiente.