24 septiembre, 2023

CALCULAR DÍAS LABORABLES CON PYTHON

Hola a todos:

Una tarea muy habitual cuando trabajamos con datos relacionados con el mundo laboral es el cálculo de los días laborables. Es muy común hacerlo directamente con Excel usando la función DIAS.LAB o, si se quiere, programando la misma función en VBA.

En el post de hoy veremos una forma de calcularlos con Python, importando la información y exportando los resultado a Excel.

El archivo de Excel a importar sería este:

y el ejemplo sería calcular los días laborables entre las fechas de Inicio y Fin y sin tener en cuenta los días festivos nacionales (para 2021): [‘2021-01-01′,’2021-01-06′,’2021-04-02′,’2021-05-01′,’2021-10-12′,’2021-11-01′,’2021-12-06′,’2021-12-08′,’2021-12-25’]

Para realizar este trabajo os propongo el siguiente código:

import pandas as pd
import xlsxwriter
import numpy as np
from datetime import timedelta, date
#Importamos archivo excel
df = pd.read_excel(r"C:\Users\USUARIO\OneDrive\Documents-Segu\DIAS LAB\FECHAS.xlsx",sheet_name='Hoja1')
count= 0
#inidicamos ruta del archivo en el que vamos a exportar los datos y el formato de fecha
workbook = xlsxwriter.Workbook(r'C:\Users\USUARIO\OneDrive\Documents-Segu\DIAS LAB\RESULTADO.xlsx',{'default_date_format':'dd/mm/yyyy'})
worksheet = workbook.add_worksheet('Hoja1')
for index, row in df.iterrows():
    worksheet.write(0, 0, 'INICIO')
    worksheet.write(0, 1, 'FIN')
    worksheet.write(0, 2, 'DIAS LAB')
    #Escribimos columna inicio
    worksheet.write(count+1, 0, row[0])
    #Escribimos columna fin
    worksheet.write(count+1, 1, row[1]) 
    #Inidicamos días festivos/no laborales
    Festivos=['2021-01-01','2021-01-06','2021-04-02','2021-05-01',
    '2021-10-12','2021-11-01','2021-12-06','2021-12-08','2021-12-25']
    #calculamos días laborales sumamos +1 a fecha fin
    inicio = row[0].date()
    fin = row[1].date()+timedelta(days=1)
    worksheet.write(count+1, 2, np.busday_count(inicio, fin,holidays=Festivos))
    count += 1
    print(np.busday_count(inicio, fin,holidays=Festivos))
workbook.close()

Podéis ver todos los comentarios que he realizado para explicar correctamente la programación. Es importante que sumemos un día (+1) a la fecha final, dado que lo que buscamos el mismo resultado que la función días.lab de Excel y así y lo conseguiremos.

Especificaremos en una matriz los días festivos o de vacaciones para que no se tengan en cuenta a la hora de contar los días.

Una vez aplicado el código y exportar la información este es el resultado:

Siendo la misma que si la hubiésemos calculado con Excel.

Y esto es todo, espero que os sea de utilidad!

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

2 comentarios en «CALCULAR DÍAS LABORABLES CON PYTHON»

  1. hola buen trabajo, sería posible adaptarlo a la formula dias.lab.intl? en la columna D estaría que días no laborables serían?, gracias.

    1. Sí, lo puedes hacer especificáncolo en la función con una matriz que indique los días a tener en cuenta: [1,1,1,1,1,0,0] de los 7 días el 6 y el 7 no los tiene en cuenta, (fin de semana), puedes modificarlo y así definir qué es lo que interpretas como fin de semana.

      worksheet.write(count+1, 2, np.busday_count(inicio, fin,[1,1,1,1,1,0,0],holidays=Festivos))

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies