Help me mijn Pandas DataFrame documenteren en annoteren voor betere samenwerking
description
Helpt gebruikers de duidelijkheid en onderhoudbaarheid van hun data te verbeteren met goed gestructureerde documentatie en metadata, wat betere samenwerking en minder misverstanden in data projecten mogelijk maakt. Deze prompt biedt praktische methoden om annotaties direct in Pandas DataFrames op te nemen en te beheren, een aspect dat in bestaande prompts ontbreekt.
prompt
Ik heb een Pandas DataFrame met de volgende data: <voer een beschrijving of voorbeeld van je DataFrame in>. Help me gedetailleerde documentatie en annotaties te maken, inclusief kolombeschrijvingen, uitleg van datatypes en voorbeeldwaarden. Laat m ...
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=3655 locale=nl err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3655 locale=en err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3655 locale=de err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3655 locale=fr err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3655 locale=pt err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3655 locale=es err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3655 locale=zh err=OpenAI connection/timeout
provider: deepseek
model: deepseek-chat
Zeker, hier is een gedetailleerde handleiding in het Nederlands voor het documenteren van je Pandas DataFrame:
# Documentatiehandleiding voor Pandas DataFrame
## 📋 Metadata Documentatie
### Kolombeschrijvingen:
- **klant_id** (`int64`): Unieke identificatiecode van de klant
- Voorbeeld: `12345`, `67890`
- Constraints: Moet uniek zijn, niet-null waarden
- **aankoopbedrag** (`float64`): Het bedrag van de aankoop in euro's
- Voorbeeld: `49.99`, `150.50`
- Constraints: Moet positief zijn, decimalen gescheiden door punt
- **aankoopdatum** (`datetime64[ns]`): Datum en tijd van de aankoop
- Voorbeeld: `2024-01-15 14:30:00`
- Format: `YYYY-MM-DD HH:MM:SS`
## 🐍 Python Implementatie
### 1. Metadata toevoegen aan DataFrame attributen
```python
import pandas as pd
from datetime import datetime
# Voorbeeld DataFrame aanmaken
data = {
'klant_id': [101, 102, 103],
'aankoopbedrag': [49.99, 150.50, 25.00],
'aankoopdatum': [
datetime(2024, 1, 15, 14, 30),
datetime(2024, 1, 16, 10, 15),
datetime(2024, 1, 17, 16, 45)
]
}
df = pd.DataFrame(data)
# Metadata toevoegen als attributen
df.attrs['metadata'] = {
'dataset_naam': 'Klantenaankopen',
'beschrijving': 'Dataset met klantaankoopgegevens',
'aangemaakt_op': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'versie': '1.0',
'eigenaar': 'Jouw Team Naam'
}
df.attrs['kolom_beschrijvingen'] = {
'klant_id': 'Unieke identificatiecode van de klant (integer)',
'aankoopbedrag': 'Aankoopbedrag in euro\'s (float)',
'aankoopdatum': 'Datum en tijd van aankoop (datetime)'
}
df.attrs['datatype_info'] = {
'klant_id': 'int64 - Unieke identifier',
'aankoopbedrag': 'float64 - Monetair bedrag',
'aankoopdatum': 'datetime64[ns] - Tijdstempel'
}
```
### 2. Externe documentatie bestanden
**metadata.yaml** (aanbevolen voor samenwerking):
```yaml
dataset:
naam: "Klantenaankopen"
beschrijving: "Dataset met klantaankoopgegevens"
versie: "1.0"
aangemaakt: "2024-01-15"
laatst_bijgewerkt: "2024-01-15"
eigenaar: "Jouw Team Naam"
kolommen:
klant_id:
type: "int64"
beschrijving: "Unieke identificatiecode van de klant"
constraints: ["niet-null", "uniek"]
voorbeeld: 12345
aankoopbedrag:
type: "float64"
beschrijving: "Het bedrag van de aankoop in euro's"
constraints: ["positief"]
voorbeeld: 49.99
aankoopdatum:
type: "datetime64[ns]"
beschrijving: "Datum en tijd van de aankoop"
format: "YYYY-MM-DD HH:MM:SS"
voorbeeld: "2024-01-15 14:30:00"
```
### 3. Automatische metadata validatie
```python
def validate_metadata(df):
"""Valideert DataFrame metadata en structuren"""
required_attrs = ['metadata', 'kolom_beschrijvingen', 'datatype_info']
for attr in required_attrs:
if attr not in df.attrs:
print(f"Waarschuwing: {attr} ontbreekt in metadata")
# Controleer datatypes
expected_dtypes = {
'klant_id': 'int64',
'aankoopbedrag': 'float64',
'aankoopdatum': 'datetime64[ns]'
}
for kolom, expected_type in expected_dtypes.items():
if df[kolom].dtype != expected_type:
print(f"Waarschuwing: {kolom} heeft type {df[kolom].dtype}, verwacht {expected_type}")
def update_metadata(df, wijzigingen=None):
"""Update metadata met wijzigingen"""
if wijzigingen:
df.attrs.update(wijzigingen)
df.attrs['laatst_bijgewerkt'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return df
```
### 4. Metadata export functies
```python
def export_metadata(df, bestandsnaam='metadata.json'):
"""Exporteert metadata naar JSON bestand"""
import json
metadata = {
'algemeen': df.attrs.get('metadata', {}),
'kolommen': df.attrs.get('kolom_beschrijvingen', {}),
'datatypes': {col: str(df[col].dtype) for col in df.columns},
'statistieken': {
'aantal_rijen': len(df),
'aantal_kolommen': len(df.columns),
'ontbrekende_waarden': df.isnull().sum().to_dict()
}
}
with open(bestandsnaam, 'w', encoding='utf-8') as f:
json.dump(metadata, f, indent=2, ensure_ascii=False)
def print_metadata_overzicht(df):
"""Print een overzicht van de metadata"""
print("=== DATASET METADATA ===")
for key, value in df.attrs.get('metadata', {}).items():
print(f"{key}: {value}")
print("\n=== KOLOMBESCHRIJVINGEN ===")
for kolom, beschrijving in df.attrs.get('kolom_beschrijvingen', {}).items():
print(f"{kolom}: {beschrijving} (type: {df[kolom].dtype})")
```
## 🔄 Best Practices voor Onderhoud
### 1. Metadata bij wijzigingen bijwerken
```python
# Voorbeeld: Nieuwe kolom toevoegen
def voeg_kolom_toe(df, kolom_naam, data, beschrijving, datatype_info):
df[kolom_naam] = data
df.attrs['kolom_beschrijvingen'][kolom_naam] = beschrijving
df.attrs['datatype_info'][kolom_naam] = datatype_info
df.attrs['laatst_bijgewerkt'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return df
```
### 2. Versiebeheer
```python
def update_versie(df, major=False, minor=True, patch=False):
"""Update versienummer volgens semantic versioning"""
huidige_versie = df.attrs.get('metadata', {}).get('versie', '0.0.0')
major_v, minor_v, patch_v = map(int, huidige_versie.split('.'))
if major:
major_v += 1
minor_v = 0
patch_v = 0
elif minor:
minor_v += 1
patch_v = 0
elif patch:
patch_v += 1
nieuwe_versie = f"{major_v}.{minor_v}.{patch_v}"
df.attrs['metadata']['versie'] = nieuwe_versie
return df
```
### 3. Gebruik in Jupyter Notebooks
```python
# Cel 1: Metadata setup
%run metadata_setup.py # Extern script met metadata definities
# Cel 2: Data laden en metadata toepassen
df = pd.read_csv('aankoopdata.csv')
df = apply_metadata_template(df) # Vooraf gedefinieerde functie
# Cel 3: Metadata weergeven
print_metadata_overzicht(df)
```
## 📁 Projectstructuur aanbeveling
```
project/
├── data/
│ ├── raw/
│ ├── processed/
│ └── metadata.yaml
├── scripts/
│ ├── metadata_management.py
│ └── data_validation.py
├── docs/
│ └── DATA_DICTIONARY.md
└── requirements.txt
```
Deze aanpak zorgt voor consistente, goed gedocumenteerde data die eenvoudig gedeeld en onderhouden kan worden binnen je team.