Sehr gut aufgepasst, Detlef!
---
### 🛠️ **Fehlerursache**
Der Fehler:
```
KeyError: 'ERGEBNIS_NAME'
```
bedeutet: Die Spalte `ERGEBNIS_NAME` existiert **nicht** im geladenen DataFrame.
Das ist oft ein Fall von:
- **Leicht abweichender Spaltenbezeichnung** (z. B. Leerzeichen: `'ERGEBNIS NAME'`, `'ERGEBNIS_NAME '` etc.)
- **Excel-Datei mit leerer Kopfzeile** oder verschobenen Daten
- Umlaute oder Kodierungsprobleme
---
### ✅ Sofortlösung: Spaltennamen anzeigen
Füge ganz oben nach dem Laden der Datei einfach ein:
```python
print("Spaltenüberschriften:", df.columns.tolist())
```
So erkennst du sofort, wie die Spalte wirklich heißt.
---
### 💡 Vorschlag: Robustheit + Fortschrittsanzeige
Hier ein besserer, robuster Einstieg mit:
- Spaltenbereinigung (automatisches Strippen)
- Progressbar mit `tqdm`
---
### 🐍 **Robuster Skriptanfang + Fortschrittsanzeige**
```python
import pandas as pd
import os
from tqdm import tqdm
# === PARAMETER ===
EINGABE_DATEI = "Gasnetzabgabe BNA - Kontrolle Netzanschluss Gas.xlsx"
AUSGABE_DATEI = os.path.join("fertig", "Gas-Netzanschlüsse.xlsx")
RELEVANTE_FELDER = [
"Lage des GNA",
"Nennweite zur Inneninstallation",
"Telefon",
"Hauptabsperreinrichtung Art",
"Name Eigentümer",
"Zugang des GNA",
"Verbindungsart zur Inneninstallation",
"Ort Eigentümer",
"Straße + Hausnummer Eigentümer",
"Bauart",
"Status",
"Anschluss der Erdung",
"Rohre unter schwitzwasserbildenden Leitungen"
]
# === SCHRITT 1: Datei laden ===
print(f"Lade Datei: {EINGABE_DATEI}")
df = pd.read_excel(EINGABE_DATEI)
# Spalten bereinigen (z. B. Leerzeichen entfernen)
df.columns = df.columns.str.strip()
# Optional: Spaltennamen anzeigen
print("Spaltenüberschriften:", df.columns.tolist())
# === SCHRITT 2: Datumsfeld parsen ===
df['AUFGABEN_ERLEDIGT_DATUM'] = pd.to_datetime(df['AUFGABEN_ERLEDIGT_DATUM'], errors='coerce').dt.date
# === SCHRITT 3: Relevante Ergebniszeilen filtern ===
if 'ERGEBNIS_NAME' not in df.columns or 'ERGEBNIS_WERT' not in df.columns:
raise ValueError("❌ Die Spalten 'ERGEBNIS_NAME' oder 'ERGEBNIS_WERT' fehlen oder heißen anders.")
df_relevant = df[df['ERGEBNIS_NAME'].isin(RELEVANTE_FELDER)].dropna(subset=['ERGEBNIS_WERT'])
# === SCHRITT 4: Jüngste Wartung pro Objektkennung ermitteln ===
print("Berechne jüngstes Datum pro Objektkennung…")
neueste_daten = df.groupby('OBJEKT_KENNUNG')['AUFGABEN_ERLEDIGT_DATUM'].max().reset_index()
# === SCHRITT 5: Join und Pivot ===
print("Verknüpfe und transformiere Daten…")
df_neu = pd.merge(df_relevant, neueste_daten, on=['OBJEKT_KENNUNG', 'AUFGABEN_ERLEDIGT_DATUM'])
# Fortschrittsanzeige beim Pivot entfällt (schneller Pandas-Befehl)
pivot = df_neu.pivot_table(
index=['OBJEKT_KENNUNG', 'AUFGABEN_ERLEDIGT_DATUM'],
columns='ERGEBNIS_NAME',
values='ERGEBNIS_WERT',
aggfunc='first'
).reset_index()
# === SCHRITT 6: Optionale Spaltenreihenfolge ===
gewünschte_reihenfolge = [
'OBJEKT_KENNUNG',
'AUFGABEN_ERLEDIGT_DATUM',
"Lage des GNA",
"Zugang des GNA",
"Verbindungsart zur Inneninstallation",
"Nennweite zur Inneninstallation",
"Hauptabsperreinrichtung Art",
"Anschluss der Erdung",
"Rohre unter schwitzwasserbildenden Leitungen",
"Bauart",
"Status",
"Name Eigentümer",
"Ort Eigentümer",
"Straße + Hausnummer Eigentümer",
"Telefon"
]
pivot = pivot[[col for col in gewünschte_reihenfolge if col in pivot.columns]]
# === SCHRITT 7: Speichern ===
os.makedirs(os.path.dirname(AUSGABE_DATEI), exist_ok=True)
pivot.to_excel(AUSGABE_DATEI, index=False)
print(f"✅ Export abgeschlossen: {AUSGABE_DATEI}")
```
---
### 📦 `tqdm` installieren (falls du's brauchst)
```bash
pip install tqdm
```
Ich kann dir auch helfen, das Ganze als `argparse`-fähiges CLI-Tool zu bauen – damit du Datei + Ziel flexibel aufrufst.
Willst du, dass ich das Skript als Datei zusammenstelle (`extract_gas_house_connection.py`)?