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ählen
  • usecols='A:E' – Nur bestimmte Spalten einlesen
  • skiprows=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: