Als data scientist zul je vaak datasets tegenkomen waarin tijden en data voorkomen. Denk bijvoorbeeld aan voetbalwedstrijden die op bepaalde data zijn gespeeld, een meting van een bloedwaarde op een bepaalde datum, of een bekeuring die op een bepaald moment is uitgeschreven.
In veel data science vraagstukken zul je op zoek zijn naar slechts een stukje van het "data en tijden veld" uit de dataset. Bijvoorbeeld alleen de dag van de week, het weeknummer, of het uur van de dag. Gelukkig biedt Python alle mogelijkheden om deze data te bewerken.
In dit blog zullen we ingaan op de modules en packages die hiervoor gebruikt worden. We behandelen hoe je uit een 'string' tijden en/of data kunt halen, we laten zien hoe je specifieke onderdelen van een datetime object selecteert, en hoe je berekeningen kunt uitvoeren met dit datatype.
- Python datetime importeren
- Wat is Python strptime?
- Wat is Python strftime?
- Hoe werk ik met tijden alleen?
- Hoe rekenen ik met tijden en data?
Python datetime importeren en basis
Allereerst zullen we ingaan op de mogelijkheden van de datetime module binnen Python.
Als je mee wilt doen met de voorbeelden in dit blog moet je Python installeren en we raden bovendien aan Jupyter Notebook te installeren.
Je kunt de datetime module als volgt importeren.
import datetime
Met het importeren van datetime verkrijg je verschillende nieuwe "classes" om mee te werken, waaronder:
- De datetime.datetime class gebruik je voor data waarin datums en tijden voorkomen
- datetime.date gebruik je voor data met datums
- datetime.time gebruik je voor data waarin tijden voorkomen
- datetime.timedelta gebruik je om het verschil tussen twee datapunten te berekenen
De eerste class wordt veruit het meest gebruikt en kent de volgende paramenters:
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Je kunt als volgt een Python datetime object maken:
toekomst = datetime.datetime(2040, 12, 5)
print(toekomst)
print(type(toekomst))
2040-12-05 00:00:00
<class 'datetime.datetime'>
Je ziet dat wanneer je geen waarden voor uren, minuten, en seconden invult, deze op "0" worden gezet.
Nu je een datetime object hebt kun je hier specifieke informatie uit halen als je bijvoorbeeld alleen het weeknummer nodig hebt.
weeknummer = toekomst.strftime('%W')
print(weeknummer)
49
Hierover later meer als we strftime() behandelen.
Wat is Python strptime?
Met datetime.strptime() kun je van een 'string' (een stukje tekst) een datetime object maken waardoor er veel meer mogelijkheden in jouw data analyse ontstaan.
Binnen verschillende programmeertalen is de strftime syntax de standaard voor het werken met datums en tijden. Om bepaalde aspecten van data en tijden aan te geven kunnen onderstaande codes gebruikt worden, die altijd beginnen met een "%".
Deze codes kunnen als volgt binnen datetime.strptime() gebruikt worden:
lastig_datumformat = "12/05-2025 om 04h:20m"
lastig_datumformat_ontcijferd = datetime.datetime.strptime(lastig_datumformat, "%d/%m-%Y om %Hh:%Mm")
print(lastig_datumformat_ontcijferd)
print(type(lastig_datumformat_ontcijferd))
2025-05-12 04:20:00
<class 'datetime.datetime'>
We hebben hier te maken met een zeer ongebruikelijke structuur voor de datum en tijd, dat bovendien als 'string' is opgeslagen. Toch kunnen we - gebruikmakend van de strftime codes - gemakkelijk de benodigde informatie uit de string destilleren.
Binnen de datetime module kun je nu bijvoorbeeld de dagen, maanden, jaren, uren, of minuten op de volgende manier ophalen.
print(lastig_datumformat_ontcijferd.day)
print(lastig_datumformat_ontcijferd.month)
print(lastig_datumformat_ontcijferd.year)
print(lastig_datumformat_ontcijferd.hour)
print(lastig_datumformat_ontcijferd.minute)
12
5
2025
4
20
Nu we een python datetime object hebben kunnen we met Python strftime nieuwe datum-structuren samenstellen.
Wat is Python strftime?
Waar we met strptime tekst kunnen parsen zodat we een datetime object overhouden, doe je met datetime.strftime() eigenlijk het omgekeerde. Je kunt een bestaand datetime object op iedere manier die je wilt formatten, zo lang je binnen de mogelijkheden van de strftime syntax blijft.
We kunnen onze nieuw verkregen datetime variabele hiervoor gebruiken.
nieuwe_datum_samenstelling = lastig_datumformat_ontcijferd.strftime("%d/%m/%Y")
print(nieuwe_datum_samenstelling)
print(type(nieuwe_datum_samenstelling))
12/05/2025
<class 'str'>
Zo kun je dus een nieuwe datum en tijd structuur samenstellen en opslaan als string. De mogelijkheden hiervoor zijn eindeloos.
lastig_datumformat_ontcijferd.strftime("%A %d %B at time %I:%M %p in week %W of %Y")
'Monday 12 May at time 04:20 AM in week 19 of 2025'
Hoe werk ik met tijden alleen?
Net als datetime.datetime heeft de datetime.time class bepaalde parameters, die in dit geval allemaal optioneel zijn:
class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
hoelaat_is_het = datetime.time(20, 0, 1, 20)
print(hoelaat_is_het)
print(type(hoelaat_is_het))
20:00:01.000020
<class 'datetime.time'>
In bovenstaande notebook zie je dat de tijd een paar microseconden over één minuut over acht uur 's avonds is. Ook voor time objecten is het mogelijk met datetime.time.strptime() en datetime.time.strftime() respectievelijk tijden te parsen uit strings en nieuwe formats te genereren.
uur_van_de_dag = hoelaat_is_het.strftime("%H")
print(uur_van_de_dag)
20
Hoe rekenen ik met tijden en data?
Nu we weten hoe we data kunnen ontcijferen vanuit strings en een indruk hebben van de mogelijkheden van datetime objecten zullen we laten zien hoe je rekent met deze data.
Zo kun je kijken of iets op hetzelfde moment plaatsvindt, of dat iets later of eerder in de tijd plaatsvindt.
vergelijking_toekomst_later = toekomst > lastig_datumformat_ontcijferd
print(vergelijking_toekomst_later)
datums_gelijk_of_niet = toekomst == lastig_datumformat_ontcijferd
print(datums_gelijk_of_niet)
True
False
Eerder op deze pagina zagen we dat variabele toekomst de datum 5 dec 2040 bevat en variabele lastig_datumformat_ontcijferd 12 mei 2025. Als we opvragen of de datetime objecten gelijk zijn dan leer je dat dat niet zo is. Als we nagaan of toekomst later is dan lastig_datumformat_ontcijferd dan leren we dat dat inderdaad waar is.
Ook kunnen we datetime momenten van elkaar aftrekken om het verschil in tijd te vinden.
verschil_in_tijd = toekomst - lastig_datumformat_ontcijferd
print(verschil_in_tijd)
print(type(verschil_in_tijd))
5685 days, 19:40:00
<class 'datetime.timedelta'>
We krijgen dan een datetime.timedelta object terug, oftewel het verschil in tijd tussen twee momenten. Met timedelta's kun je verschillende berekeningen doen, zoals de delta optellen bij een datetime moment.
verdere_toekomst = toekomst + verschil_in_tijd
print(verdere_toekomst)
print(type(verdere_toekomst))
2056-06-29 19:40:00
<class 'datetime.datetime'>
Je zult het volgende gedrag vinden:
- datetime + timedelta = datetime
- datetime - timedelta = datetime
- datetime - datetime = timedelta
- timedelta - timedelta = timedelta
- timedelta + timedelta = timedelta
Wil je nog veel meer leren over Python en Data Science? Schrijf je dan in voor onze Python cursus voor data science, onze machine learning training, of voor onze data science opleiding en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.
Download één van onze opleidingsbrochures voor meer informatie
Rik is data scientist en marketeer bij Data Science Partners. Vanuit zijn achtergrond op de Technische Universiteit Eindhoven heeft hij veel affiniteit met data. Na zijn studie heeft hij als consultant altijd met data gewerkt en tevens ervaring opgedaan in het geven van trainingen.