Help me modelleren en transformeren van Pandas DataFrames met geavanceerde datetime-functies
description
Met deze prompt kan de gebruiker geavanceerde tijdgerelateerde data manipuleren in Pandas, wat essentieel is voor tijdreeksanalyse, rapportage en data cleaning. Het helpt complexe datetime-uitdagingen op te lossen die niet worden behandeld in standaard data transformatie prompts, waardoor gebruikers efficiënter en nauwkeuriger met tijddata kunnen werken.
prompt
try_prompt
Ik heb een Pandas DataFrame met tijdgerelateerde gegevens: <voer een beschrijving of voorbeeld van je DataFrame in>. Help me geavanceerde datetime-transformaties uit te voeren zoals het converteren van tijdzones, ext ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
no_answer_for_language
error: Generation failed [openai] prompt_id=3650 locale=nl err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3650 locale=en err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3650 locale=de err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3650 locale=fr err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3650 locale=pt err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3650 locale=es err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3650 locale=zh err=OpenAI connection/timeout
provider: deepseek
model: deepseek-chat
Zeker, hier is een uitgebreide uitleg met Python-voorbeelden voor geavanceerde datetime-transformaties in Pandas:
```python
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# Voorbeeld DataFrame aanmaken
data = {
'timestamp': [
'2023-03-15 08:30:00+00:00',
'2023-03-15 12:45:00+00:00',
'2023-06-20 18:20:00+00:00',
'2023-09-10 22:10:00+00:00',
None, # Ontbrekende timestamp
'2023-12-05 03:30:00+00:00'
],
'temperatuur': [15.2, 18.7, 22.3, 19.8, 21.1, 12.5],
'locatie': ['Amsterdam', 'Rotterdam', 'Utrecht', 'Den Haag', 'Eindhoven', 'Groningen']
}
df = pd.DataFrame(data)
print("Originele DataFrame:")
print(df)
```
**1. Tijdzoneconversie en datetime parsing**
```python
# Converteer string naar datetime object met tijdzone
df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True)
# Converteer naar Nederlandse tijdzone (CET/CEST)
df['timestamp_nl'] = df['timestamp'].dt.tz_convert('Europe/Amsterdam')
print("\nNa tijdzoneconversie:")
print(df[['timestamp', 'timestamp_nl']])
```
*Waarom nuttig*: Zorgt voor consistente tijdweergave voor Nederlandse analyse en rapportering.
**2. Extraheren van tijdseenheden**
```python
# Extraheer verschillende tijdcomponenten
df['jaar'] = df['timestamp_nl'].dt.year
df['kwartaal'] = df['timestamp_nl'].dt.quarter
df['maand'] = df['timestamp_nl'].dt.month
df['weeknummer'] = df['timestamp_nl'].dt.isocalendar().week
df['dag_van_het_jaar'] = df['timestamp_nl'].dt.dayofyear
df['uur_van_de_dag'] = df['timestamp_nl'].dt.hour
df['is_weekend'] = df['timestamp_nl'].dt.dayofweek >= 5
print("\nGeëxtraheerde tijdseenheden:")
print(df[['timestamp_nl', 'kwartaal', 'weeknummer', 'is_weekend']])
```
*Waarom nuttig*: Maakt seizoensanalyse mogelijk (kwartalen), week-over-week vergelijkingen, en patroonherkenning per tijdseenheid.
**3. Omgaan met ontbrekende tijdstempels**
```python
# Identificeer ontbrekende waarden
print(f"Aantal ontbrekende timestamps: {df['timestamp'].isna().sum()}")
# Strategie 1: Forward fill (vullen met vorige waarde)
df['timestamp_ffill'] = df['timestamp'].fillna(method='ffill')
# Strategie 2: Interpolatie op basis van andere kolommen
# Voor complexere scenario's waarbij tijd lineair relateert tot andere variabelen
# Strategie 3: Markeren en apart behandelen
df['timestamp_ontbreekt'] = df['timestamp'].isna()
print("\nNa behandeling ontbrekende waarden:")
print(df[['timestamp', 'timestamp_ffill', 'timestamp_ontbreekt']])
```
*Waarom nuttig*: Behoudt data-integriteit en voorkomt bias in tijdreeksanalyse.
**4. Filteren op complexe tijdsintervallen**
```python
# Filter op specifiek kwartaal
q2_data = df[df['timestamp_nl'].dt.quarter == 2]
print("\nData voor Q2 2023:")
print(q2_data)
# Filter op werkdagen tijdens kantooruren
werkdagen_kantooruren = df[
(df['timestamp_nl'].dt.dayofweek < 5) & # Maandag-vrijdag
(df['timestamp_nl'].dt.hour >= 9) & # Na 9:00
(df['timestamp_nl'].dt.hour < 17) # Voor 17:00
]
# Filter op specifiek datumbereik
start_date = pd.Timestamp('2023-06-01', tz='Europe/Amsterdam')
end_date = pd.Timestamp('2023-08-31', tz='Europe/Amsterdam')
zomer_data = df[df['timestamp_nl'].between(start_date, end_date)]
# Dynamisch filteren op afgelopen 30 dagen
laatste_30_dagen = df[df['timestamp_nl'] > (pd.Timestamp.now(tz='Europe/Amsterdam') - timedelta(days=30))]
```
*Waarom nuttig*: Maakt gerichte analyse mogelijk voor specifieke business cases en seizoenseffecten.
**5. Geavanceerde groepering en aggregatie**
```python
# Groepeer per kwartaal en bereken gemiddelde temperatuur
kwartaal_gemiddelden = df.groupby(df['timestamp_nl'].dt.to_period('Q'))['temperatuur'].mean()
print("\nGemiddelde temperatuur per kwartaal:")
print(kwartaal_gemiddelden)
# Groepeer per uur van de dag voor alle dagen
uurly_patterns = df.groupby(df['timestamp_nl'].dt.hour)['temperatuur'].agg(['mean', 'std', 'count'])
print("\nTemperatuurpatroon per uur:")
print(uurly_patterns)
```
**6. Tijdverschillen berekenen**
```python
# Bereken tijd sinds vorige meting
df['tijd_sinds_vorig'] = df['timestamp_nl'].diff()
df['minuten_sinds_vorig'] = df['tijd_sinds_vorig'].dt.total_seconds() / 60
print("\nTijdverschillen tussen metingen:")
print(df[['timestamp_nl', 'minuten_sinds_vorig']])
```
Deze technieken zijn essentieel voor:
- Seizoensgebonden trendanalyse
- Anomaliedetectie in tijdreeksen
- Prestatiemonitoring over tijd
- Capaciteitsplanning op basis van tijdpatronen
- Correcte tijdzone-afhankelijke rapportage
Let op: Zorg dat je `pytz` of `zoneinfo` geïnstalleerd hebt voor tijdzone-ondersteuning:
```bash
pip install pytz
```

