Warum Pandas statt Excel-Formeln?
Excel ist für einfache Tabellen ideal, aber bei größeren Datenmengen wird’s schnell unübersichtlich. Mit Pandas lassen sich Excel-Dateien einlesen, analysieren und statistisch auswerten – reproduzierbar und automatisierbar.
Installation
pip install pandas openpyxl
openpyxl wird für Excel-Dateien (.xlsx) benötigt.
Excel-Datei einlesen
import pandas as pd
# Excel-Datei einlesen
df = pd.read_excel('verkaufsdaten.xlsx', sheet_name='Umsätze')
# Ersten Blick auf die Daten
print(df.head())
print(df.info())
Wichtige Parameter:
sheet_name='Name'– Bestimmtes Tabellenblatt auswählenusecols='A:E'– Nur bestimmte Spalten einlesenskiprows=2– Erste Zeilen überspringen
Basis-Statistiken
# Schneller Überblick
print(df.describe())
# Einzelne Statistiken
print(f"Durchschnitt: {df['Umsatz'].mean():.2f} €")
print(f"Median: {df['Umsatz'].median():.2f} €")
print(f"Minimum: {df['Umsatz'].min():.2f} €")
print(f"Maximum: {df['Umsatz'].max():.2f} €")
print(f"Summe: {df['Umsatz'].sum():.2f} €")
Output:
Durchschnitt: 15234.56 €
Median: 12300.00 €
Minimum: 450.00 €
Maximum: 89700.00 €
Summe: 2134561.23 €
Gruppierte Auswertungen
# Umsatz pro Produkt
umsatz_pro_produkt = df.groupby('Produkt')['Umsatz'].agg([
('Anzahl', 'count'),
('Gesamt', 'sum'),
('Durchschnitt', 'mean')
])
print(umsatz_pro_produkt)
Ergebnis:
Anzahl Gesamt Durchschnitt
Produkt
Laptop 45 678900.0 15086.67
Monitor 89 234560.0 2636.18
Tastatur 156 23450.0 150.32
Filtern und Bedingungen
# Umsätze über 10.000 €
hohe_umsaetze = df[df['Umsatz'] > 10000]
# Mehrere Bedingungen
premium_verkauf = df[
(df['Umsatz'] > 10000) &
(df['Produkt'] == 'Laptop')
]
# Daten nach Datum filtern
df['Datum'] = pd.to_datetime(df['Datum'])
q1_2026 = df[(df['Datum'] >= '2026-01-01') &
(df['Datum'] <= '2026-03-31')]
print(f"Q1 Umsatz: {q1_2026['Umsatz'].sum():.2f} €")
Monatliche Auswertung
# Datum als Index setzen
df['Datum'] = pd.to_datetime(df['Datum'])
df.set_index('Datum', inplace=True)
# Monatliche Summen
monatlich = df.resample('M')['Umsatz'].agg([
'sum', 'mean', 'count'
])
print(monatlich)
Output:
sum mean count
Datum
2026-01-31 456234.50 15207.82 30
2026-02-28 389012.30 14037.60 28
Top/Flop Analyse
# Top 10 Umsätze
top10 = df.nlargest(10, 'Umsatz')[['Produkt', 'Kunde', 'Umsatz']]
# Flop 5
flop5 = df.nsmallest(5, 'Umsatz')[['Produkt', 'Umsatz']]
print("Top 10 Deals:")
print(top10)
Ergebnisse zurück nach Excel schreiben
# Einzelnes Sheet
umsatz_pro_produkt.to_excel('auswertung.xlsx', sheet_name='Produktstatistik')
# Mehrere Sheets
with pd.ExcelWriter('auswertung.xlsx') as writer:
umsatz_pro_produkt.to_excel(writer, sheet_name='Produkte')
monatlich.to_excel(writer, sheet_name='Monatlich')
top10.to_excel(writer, sheet_name='Top10', index=False)
print("Auswertung gespeichert: auswertung.xlsx")
Praktisches Beispiel: Verkaufsbericht
import pandas as pd
from datetime import datetime
# Daten einlesen
df = pd.read_excel('verkaufsdaten.xlsx')
df['Datum'] = pd.to_datetime(df['Datum'])
# Zeitraum definieren
heute = datetime.now()
letzter_monat = heute - pd.DateOffset(months=1)
df_monat = df[df['Datum'] >= letzter_monat]
# Statistiken berechnen
bericht = {
'Gesamtumsatz': df_monat['Umsatz'].sum(),
'Durchschnitt': df_monat['Umsatz'].mean(),
'Anzahl Verkäufe': len(df_monat),
'Bestes Produkt': df_monat.groupby('Produkt')['Umsatz'].sum().idxmax(),
'Top Kunde': df_monat.groupby('Kunde')['Umsatz'].sum().idxmax()
}
# Als DataFrame für Excel
bericht_df = pd.DataFrame([bericht])
bericht_df.to_excel('monatsbericht.xlsx', index=False)
print("Monatsbericht erstellt!")
for key, value in bericht.items():
print(f"{key}: {value}")
Häufige Probleme
Excel-Datei ist zu groß
# Nur benötigte Spalten laden
df = pd.read_excel('große_datei.xlsx', usecols=['Datum', 'Umsatz'])
# Oder: Nur Stichprobe einlesen
df = pd.read_excel('große_datei.xlsx', nrows=10000)
Fehlende Werte
# NaN-Werte prüfen
print(df.isnull().sum())
# NaN entfernen oder ersetzen
df_clean = df.dropna() # Zeilen mit NaN entfernen
df['Umsatz'].fillna(0, inplace=True) # NaN durch 0 ersetzen
Datumsformate
# Datum parsen mit Format
df['Datum'] = pd.to_datetime(df['Datum'], format='%d.%m.%Y')
# Deutsche Locale für Monatsnamen
df['Datum'] = pd.to_datetime(df['Datum'], format='%d. %B %Y')
Fazit
Pandas macht Excel-Analysen schneller, wiederholbar und skalierbar. Statt komplexer Formeln in Excel einmal Python-Code schreiben und bei neuen Daten einfach neu ausführen.
Wann Pandas statt Excel?
- ✅ Große Datenmengen (> 100.000 Zeilen)
- ✅ Wiederkehrende Auswertungen
- ✅ Komplexe Gruppierungen
- ✅ Automatisierung (Cronjobs, Pipelines)
Wann Excel ausreicht?
- 📊 Einmalige, kleine Auswertungen
- 📊 Visualisierungen für Präsentationen
- 📊 Ad-hoc Analysen ohne Code
Weitere Ressourcen: