Blog Sobre mí Contacto Iniciar Sesión Registro

Cómo utilizar Pandas para el procesamiento de fechas y series temporales

Pandas es una librería de Python que proporciona herramientas eficientes para el análisis y el procesamiento de datos. Una de las cosas que puedes hacer con Pandas es trabajar con series temporales, es decir, secuencias de datos que tienen un índice temporal (fechas).
  • Índice de contenidos:

Uso de Pandas para procesamiento de series temporales

Para empezar a utilizar Pandas para el procesamiento de series temporales, primero debes instalar la librería y luego importarla en tu código:
import pandas as pd
Una vez que tienes Pandas importado, puedes cargar tus datos en un DataFrame, que es una estructura de datos en forma de tabla con filas y columnas. Para cargar tus datos, puedes usar la función read_csv():
df = pd.read_csv("path_archivo.csv")
Si tus datos tienen una columna que representa el tiempo, puedes establecer esa columna como el índice del DataFrame usando la función set_index():
df = df.set_index("fecha")
Ahora que tienes tus datos cargados en un DataFrame con un índice temporal, puedes empezar a hacer cosas interesantes con ellos. Por ejemplo, puedes seleccionar un rango de fechas para trabajar solo con ese subconjunto de datos:
df_subset = df.loc["2022-01-01":"2022-01-31"]
También puedes agrupar tus datos por una frecuencia temporal, como meses o años, y luego aplicar una función de agregación, como la media:
df_meanspan = df.resample("M").mean()
Estos son solo algunos ejemplos de lo que puedes hacer con Pandas y series temporales. Si quieres profundizar más en el tema, te recomiendo revisar la documentación de Pandas y hacer algunos tutoriales o ejercicios prácticos.

Ejemplo de series temporales con datos de ventas de productos

A continuación, se muestra un ejemplo de cómo hacerlo utilizando datos de ventas:
import pandas as pd

# Leer los datos de ventas de cliente en un DataFrame
df = pd.read_csv('sales_data.csv', parse_dates=['fecha'])

# Mostrar el DataFrame
print(df)
El archivo sales_data.csv debe tener una columna fecha con la fecha de cada venta y otras columnas con los datos relevantes, como el importe de la venta y el ID del cliente.

En estas líneas del script Python usando pandas, la función 'parse_dates' parsea o convierte automáticamente cada valor de la columna 'fecha' en un objeto 'datetime', es decir, en un tipo de dato de fecha para poder manipularlo posteriormente correctamente. De esta forma todo el tratamiento será efectivo y podremos trabajar con series temporales adecuadamente sin recibir errores.

Obtener venta total por mes

Una vez que tienes los datos en un DataFrame, puedes utilizar las funciones de Pandas para manipular y procesar las series temporales. Por ejemplo, para obtener la venta total por mes, puedes utilizar el método resample y agrupar por mes:

# Ejemplo de datos de ventas:
------------------------------------
fecha,customer_id,venta
2022-01-01,1,100
2022-01-03,2,250
2022-02-05,1,200
2022-02-07,3,150
2022-03-01,2,300
2022-03-02,3,200
------------------------------------


# Agrupar las ventas por mes y calcular la suma
monthly_sales = df.resample('M', on='fecha').sum()

# Mostrar el total de ventas por mes
print(monthly_sales)


# Resultado
------------------------------------
fecha        customer_id   venta
2022-01-31            3     350
2022-02-28            4     350
2022-03-31            5     500



También puedes utilizar el método groupby para agrupar los datos por otras categorías, como el ID del cliente:

# Agrupar las ventas por ID del cliente y calcular la suma
customer_sales = df.groupby('customer_id').sum()

# Mostrar el total de ventas por ID del cliente
print(customer_sales)

Obtener las ventas agrupadas por dos categorías diferentes (mes e ID cliente)

Además, puedes utilizar el método pivot_table para crear una tabla pivot con las ventas agrupadas por dos categorías diferentes, como el mes y el ID del cliente:
# Crear una tabla pivot con las ventas agrupadas por mes e ID del cliente
pivot_table = df.pivot_table(index='fecha', columns='customer_id', values='venta', aggfunc='sum')

# Mostrar la tabla pivot
print(pivot_table)

------------------------------------
# Resultado
------------------------------------
customer_id   venta
1              300
2              550
3              350

En este ejemplo, se han agrupado las ventas por ID del cliente y se ha calculado la suma total de ventas para cada ID. Como puedes ver, el cliente con ID 1 realizó compras por un total de 300 euros, el cliente con ID 2 realizó compras por un total de 550 euros, y el cliente con ID 3 realizó compras por un total de 350€.

Filtrar las ventas por rango de fechas

# Filtrar las ventas del mes de febrero
february_sales = df[df['fecha'].dt.month == 2]
print(february_sales)

------------------------------------
# Resultado
------------------------------------
        fecha  customer_id  venta
2 2022-02-05            1    200
3 2022-02-07            3    150

Calcular el porcentaje de cambio entre dos períodos de tiempo o fechas

# Agrupar las ventas por mes y calcular la suma
monthly_sales = df.resample('M', on='fecha').sum()

# Calcular el porcentaje de cambio entre el mes de enero y el mes de marzo
change = monthly_sales.pct_change()
print(change)

------------------------------------
# Resultado
------------------------------------
fecha       customer_id  venta
2022-01-31          NaN    NaN
2022-02-28          0.5    0.0
2022-03-31          0.5    0.4

Como puedes ver, el porcentaje de cambio entre el mes de enero y el mes de marzo es del 40% para la columna venta. Esto significa que las ventas aumentaron en un 40% entre enero y marzo, pero, también tenemos un valor extraño "NaN".

Eliminar valores NaN o nulos

Para eliminar los valores NaN (Not a Number) que se producen al calcular el porcentaje de cambio entre dos períodos de tiempo, puedes utilizar el método dropna del DataFrame. Este método eliminará todas las filas que contengan algún valor NaN.
# Agrupar las ventas por mes y calcular la suma
monthly_sales = df.resample('M', on='fecha').sum()

# Calcular el porcentaje de cambio entre el mes de enero y el mes de marzo
change = monthly_sales.pct_change()

# Eliminar los valores NaN
change = change.dropna()
print(change)

------------------------------------
# Resultado
------------------------------------
fecha            customer_id  venta
2022-02-28          0.5    0.0
2022-03-31          0.5    0.4

Como puedes ver, se han eliminado las filas con valores NaN y solo se muestran los cambios entre el mes de febrero y el mes de marzo.

¿Y si no queremos eliminar los NaN y deseamos ponerlos a 0 (cero)? En ese caso haríamos lo siguiente:

Cambiar valores 'NaN' (Not a Number) por cero

Para asignar el valor cero a los valores NaN (Not a Number) que se producen al calcular el porcentaje de cambio entre dos períodos de tiempo, puedes utilizar el método fillna del DataFrame. Este método reemplazará todos los valores NaN por el valor especificado. A continuación, vemos cómo asignar el valor cero a los valores NaN del ejemplo anterior:
# Agrupar las ventas por mes y calcular la suma
monthly_sales = df.resample('M', on='fecha').sum()

# Calcular el porcentaje de cambio entre el mes de enero y el mes de marzo
change = monthly_sales.pct_change()

# Asignar el valor cero a los valores NaN
change = change.fillna(0)
print(change)

------------------------------------
# Resultado
------------------------------------
fecha            customer_id  venta
2022-01-31          0.0    0.0
2022-02-28          0.5    0.0
2022-03-31          0.5    0.4

Como puedes ver, se han asignado el valor cero a las filas con valores NaN y se muestran los cambios entre todos los meses.

Calcular el total de ventas por día, semana, mes o año


# Ejemplo de datos de ventas ficticios
------------------------------------
fecha,customer_id,venta
2022-01-01,1,100
2022-01-03,2,250
2022-02-05,1,200
2022-02-07,3,150
2022-03-01,2,300
2022-03-02,3,200
------------------------------------

# Agrupar las ventas por día y calcular la suma
daily_sales = df.resample('D', on='fecha').sum()

# Agrupar las ventas por semana y calcular la suma
weekly_sales = df.resample('W', on='fecha').sum()

# Agrupar las ventas por mes y calcular la suma
monthly_sales = df.resample('M', on='fecha').sum()

# Agrupar las ventas por año y calcular la suma
yearly_sales = df.resample('Y', on='fecha').sum()

------------------------------------
# Resultado
------------------------------------
fecha       customer_id  venta
2022-01-31            3    350
2022-02-28            4    350
2022-03-31            5    500

[3 rows x 2 columns]
fecha       customer_id  venta
2022-12-31            8   1200

[1 rows x 2 columns]

En este ejemplo, hemos agrupado las ventas por día, semana, mes y año y calculado la suma total de ventas para cada período de tiempo.

Calcular la media de ventas para cada período de tiempo

# Leer los datos de ventas de cliente en un DataFrame
df = pd.read_csv('sales_data.csv', parse_dates=['fecha'])

# Agrupar las ventas por día y calcular la media
daily_sales_mean = df.resample('D', on='fecha').mean()
print(daily_sales_mean)

# Agrupar las ventas por semana y calcular la media
weekly_sales_mean = df.resample('W', on='fecha').mean()
print(weekly_sales_mean)

# Agrupar las ventas por mes y calcular la media
monthly_sales_mean = df.resample('M', on='fecha').mean()
print(monthly_sales_mean)

# Agrupar las ventas por año y calcular la media
yearly_sales_mean = df.resample('Y', on='fecha').mean()
print(yearly_sales_mean)

------------------------------------
# Resultado
------------------------------------
fecha       customer_id   venta
2022-01-01          1.0  100.0
2022-01-03          2.0  250.0
2022-02-05          1.

Media de ventas para cada período de tiempo

# Agrupar las ventas por día y calcular el mínimo
daily_sales_min = df.resample('D', on='fecha').min()
print(daily_sales_min)

------------------------------------
# Resultado
------------------------------------
	fecha	customer_id	venta
0	2022-01-01	1	100
1	2022-01-03	2	250
2	2022-02-05	1	200
3	2022-02-07	3	150
4	2022-03-01	2	300
5	2022-03-02	3	200



# Agrupar las ventas por semana y calcular el mínimo
weekly_sales_min = df.resample('W', on='fecha').min()
print(weekly_sales_min)

------------------------------------
# Resultado
------------------------------------
	fecha	customer_id	venta
0	2022-01-02	1	100
1	2022-01-09	2	250
2	2022-02-06	1	200
3	2022-02-14	3	150
4	2022-03-06	2	300
5	2022-03-13	3	200



# Agrupar las ventas por mes y calcular el mínimo
monthly_sales_min = df.resample('M', on='fecha').min()
print(monthly_sales_min)

------------------------------------
# Resultado
------------------------------------
	fecha	customer_id	venta
0	2022-01-01	1	100
1	2022-02-01	1	200
2	2022-03-01	2	300



# Agrupar las ventas por año y calcular el mínimo
yearly_sales_min = df.resample('Y', on='fecha').min()
print(yearly_sales_min)

------------------------------------
# Resultado
------------------------------------
	fecha	customer_id	venta
0	2022-01-01	1	100



# Agrupar las ventas por día y calcular el máximo
daily_sales_max = df.resample('D', on='fecha').max()
print(daily_sales_max)

------------------------------------
# Resultado
------------------------------------
	fecha	customer_id	venta
0	2022-01-01	1	100
1	2022-01-03	2	250
2	2022-02-05	1	200
3	2022-02-07	3	150
4	2022-03-01	2	300
5	2022-03-02	3	200



# Agrupar las ventas por semana y calcular el máximo
weekly_sales_max = df.resample('W', on='fecha').max()
print(weekly_sales_max)

------------------------------------
# Resultado
------------------------------------
	fecha	customer_id	venta
0	2022-01-02	2	250
1	2022-01-09	2	250
2	2022-02-06	1	200
3	2022-02-14	3	150
4	2022-03-06	2	300
5	2022-03-13	3	200



# Agrupar las ventas por mes y calcular el máximo
monthly_sales_max = df.resample('M', on='fecha').max()
print(monthly_sales_max)

------------------------------------
# Resultado
------------------------------------
	fecha	customer_id	venta
0	2022-01-01	2	250
1	2022-02-01	1	200
2	2022-03-01	3	300



# Agrupar las ventas por año y calcular el máximo
yearly_sales_max = df.resample('Y', on='fecha
print(yearly_sales_max)

------------------------------------
# Resultado
------------------------------------
fecha	customer_id	venta
0	2022-01-01	3	250

Como puedes comprobar, para realizar operaciones con series temporales solo son necesarias varias líneas de código. Podemos obtener infinidad de datos valiosos para el negocio rápidamente utilizando la biblioteca pandas de Python y, por supuesto, al inicio del script o de la vista de Django hacer uso de la importación de datos con pandas.
Pandas Python Data Analysis Library

Comentarios del artículo "Cómo utilizar Pandas para el procesamiento de fechas y series temporales"


¿Te ha gustado la información? Coméntanos tus opiniones, dudas y sugerencias:


Añade un comentario:

Tu dirección de correo electrónico no será publicada. | Registro requerido. | ¿Ya eres usuario? Login