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
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 ...
try_prompt
generate_helper
disclaimerOnPageApi
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
```