Python: Compter le nombre de jours ouvrés dans un mois
Pour calculer le nombre de jours ouvrés dans un mois, je vais utiliser les modules calendar et numpy
>>> import numpy as np
>>> import calendar
La méthode monthcalendar de la classe calendar permet d'obtenir un array avec tous les jours du mois classés par semaine (du lundi au dimanche)
>>> calendar.monthcalendar(2019,10)
[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27], [28, 29, 30, 31, 0, 0, 0]]
Je le convertis en array numpy
>>> a = np.array(calendar.monthcalendar(2019,10))
>>> a
array([[ 0, 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19, 20],
[21, 22, 23, 24, 25, 26, 27],
[28, 29, 30, 31, 0, 0, 0]])
J'affiche uniquement les 5 premiers jours de chaque semaine
>>> a[:,:-2]
array([[ 0, 1, 2, 3, 4],
[ 7, 8, 9, 10, 11],
[14, 15, 16, 17, 18],
[21, 22, 23, 24, 25],
[28, 29, 30, 31, 0]])
Enfin, je compte le nombre d'éléments supérieurs à 0
>>> len(a[np.where(a[:,:-2] > 0)])
23
Le mois d'octobre de l'année 2019 compte 23 jours ouvrés.
Il est également possible d'utiliser la méthode nonzero de la classe numpy
>>> len(a[np.nonzero(a[:,:5])])
23
Une autre méthode consiste à utiliser le puissant module dateutil
>>> from dateutil.parser import *
>>> from dateutil.rrule import *
>>> from dateutil.relativedelta import *
>>> dtstart = parse('20200601')
>>> len(list(rrule(DAILY, dtstart=dtstart, until=dtstart+relativedelta(months=+1, days=-1), byweekday=[MO, TU, WE, TH, FR])))
22
La classe parser permet de convertir une date d'un format texte à un format datetime.datetime
La classe relativedelta permet d'incrémenter une date ou de calculer l'écart entre deux dates
La classe rrule permet de générer toute une liste de dates suivant différents critères
Commentaires
Antoine (non vérifié)
mar, 29/10/2019 - 14:32
Permalien
merci, très utile pour les gestionnaires de paie
j'ai toutefois galéré a installer numpy mais c'est une autre histoire :-)
ronan
mar, 29/10/2019 - 15:34
Permalien
penser python pip pour les install
si tu es sous Windows, il suffit d'exécuter cette commande dans Windows PowerShell
Si la commande est exécutée en mode admin, l'option --user n'est pas nécessaire
Ajouter un commentaire