Seit 2019 im DACH-RaumSeit 2019
50+ Statistik-Experten50+ Experten
Über 1.200 Projekte1.200+ Projekte
Alle StatistikprogrammeAlle Programme
Express möglichExpress
Statistik-Ratgeber

Wie führt man einen t-Test in Python durch?

Python · Maximilian Fuchs · 9. Juni 2026 · 10 Min. Lesezeit

Was ist ein t-Test – und wann brauche ich ihn?

Der t-Test ist eines der meistgenutzten statistischen Verfahren in Abschlussarbeiten und Forschungsprojekten. Er prüft, ob sich zwei Mittelwerte statistisch bedeutsam voneinander unterscheiden – oder ob ein beobachteter Unterschied auch zufällig entstanden sein könnte.

In Python lässt sich ein t-Test mit wenigen Zeilen Code durchführen, hauptsächlich über die Bibliothek scipy.stats. Die Frage ist weniger, wie man ihn rechnet, sondern welche Variante die richtige ist und wie man die Ergebnisse korrekt interpretiert.

Gut zu wissen Der t-Test setzt eine metrisch skalierte, abhängige Variable voraus. Die unabhängige Variable unterscheidet zwei Gruppen (z. B. Kontrollgruppe vs. Behandlungsgruppe). Für mehr als zwei Gruppen brauchen Sie eine ANOVA in Python.

Die drei Varianten: Welcher t-Test ist der richtige?

Je nach Fragestellung und Studiendesign gibt es drei grundlegende t-Test-Varianten. Die Wahl der richtigen Variante ist entscheidend – ein falscher Test führt zu falschen Schlussfolgerungen.

Übersicht der drei t-Test-Varianten
Variante Anwendungsfall scipy-Funktion
Einstichproben-t-Test Vergleich eines Stichprobenmittelwerts mit einem bekannten oder hypothetischen Wert ttest_1samp()
Unabhängiger t-Test Vergleich zweier unabhängiger Gruppen (verschiedene Personen) ttest_ind()
Abhängiger t-Test Vergleich zweier verbundener Messungen (gleiche Personen, Prä/Post) ttest_rel()

In der Praxis ist der unabhängige t-Test (auch Zweistichproben-t-Test genannt) der häufigste Anwendungsfall – etwa wenn Sie zwei Gruppen in einer Befragung oder einem Experiment miteinander vergleichen. Die folgenden Abschnitte behandeln alle drei Varianten mit konkretem Python-Code.

Voraussetzungen prüfen bevor Sie rechnen

Bevor Sie den Test starten, sollten Sie drei Voraussetzungen überprüfen:

  • Metrisches Skalenniveau der abhängigen Variable
  • Normalverteilung innerhalb jeder Gruppe (bei kleinen Stichproben besonders relevant)
  • Varianzhomogenität zwischen den Gruppen (nur beim unabhängigen t-Test)

Die Normalverteilung können Sie mit dem Shapiro-Wilk-Test prüfen (scipy.stats.shapiro()). Für die Varianzhomogenität bietet sich Levene’s Test an (scipy.stats.levene()).

Häufiger Fehler Viele Studierende führen zuerst Levene’s Test durch und wählen dann basierend auf dessen Ergebnis zwischen Student- und Welch-t-Test. Dieses zweistufige Vorgehen ist methodisch problematisch: Es kann die Typ-I-Fehlerrate verzerren, wie in der Fachliteratur gezeigt wurde. Die Empfehlung lautet daher, den Welch-t-Test direkt als Standard zu verwenden.

Unabhängiger t-Test in Python (scipy)

Der unabhängige t-Test vergleicht die Mittelwerte zweier unabhängiger Stichproben. Die Nullhypothese lautet: Die Mittelwerte beider Populationen sind gleich. Die Funktion ttest_ind() nimmt standardmäßig gleiche Varianzen an – mit dem Parameter equal_var=False aktivieren Sie stattdessen den Welch-t-Test, der bei ungleichen Varianzen oder unterschiedlichen Gruppengrößen robuster ist.

Python
import numpy as np
from scipy import stats

# Beispieldaten: Prüfungspunkte zweier Gruppen
gruppe_a = np.array([72, 68, 75, 80, 65, 70, 78, 74, 69, 73])
gruppe_b = np.array([65, 60, 58, 63, 67, 55, 61, 64, 59, 62])

# Voraussetzungen prüfen
stat_a, p_shapiro_a = stats.shapiro(gruppe_a)
stat_b, p_shapiro_b = stats.shapiro(gruppe_b)
print(f"Shapiro-Wilk Gruppe A: W={stat_a:.3f}, p={p_shapiro_a:.3f}")
print(f"Shapiro-Wilk Gruppe B: W={stat_b:.3f}, p={p_shapiro_b:.3f}")

# Levene-Test auf Varianzhomogenität (informativ)
stat_lev, p_lev = stats.levene(gruppe_a, gruppe_b)
print(f"Levene-Test: W={stat_lev:.3f}, p={p_lev:.3f}")

# Welch-t-Test (equal_var=False = robustere Wahl)
t_stat, p_wert = stats.ttest_ind(gruppe_a, gruppe_b, equal_var=False)
print(f"\nWelch-t-Test:")
print(f"t = {t_stat:.3f}, p = {p_wert:.3f}")

# Konfidenzintervall
ergebnis = stats.ttest_ind(gruppe_a, gruppe_b, equal_var=False)
ki = ergebnis.confidence_interval(confidence_level=0.95)
print(f"95%-KI der Mittelwertdifferenz: [{ki.low:.3f}, {ki.high:.3f}]")

Parameter im Überblick

Die Funktion ttest_ind() bietet mehrere nützliche Parameter, die Sie kennen sollten:

  • equal_var=False: Aktiviert den Welch-t-Test (empfohlen als Standard)
  • alternative='two-sided': Zweiseitige Hypothese (Standard); 'greater' oder 'less' für einseitige Tests
  • nan_policy='omit': Fehlende Werte werden ignoriert – nützlich bei unvollständigen Datensätzen
  • trim: Für einen getrimmten Yuen-t-Test bei Ausreißern oder langen Verteilungsschwänzen

Wer seine Daten bereits mit pandas eingelesen und vorbereitet hat, kann Gruppen direkt aus einem DataFrame herausfiltern und an ttest_ind() übergeben.

Abhängiger t-Test in Python (Paardifferenzen)

Den abhängigen t-Test verwenden Sie, wenn dieselben Personen zweimal gemessen wurden – klassischerweise in einem Prä-Post-Design. Er berechnet intern die Differenz zwischen den Paaren und testet, ob diese Differenz von null verschieden ist.

Python
from scipy import stats

# Prä- und Post-Messungen derselben Personen
prä  = [55, 60, 58, 62, 57, 63, 59, 61, 56, 64]
post = [60, 65, 62, 67, 63, 68, 64, 65, 61, 69]

# Abhängiger t-Test
t_stat, p_wert = stats.ttest_rel(prä, post)
print(f"t = {t_stat:.3f}, p = {p_wert:.3f}")

# Mittlere Differenz
import numpy as np
differenzen = np.array(post) - np.array(prä)
print(f"Mittlere Differenz: {differenzen.mean():.2f}")
print(f"SD der Differenzen: {differenzen.std(ddof=1):.2f}")

Achten Sie darauf, dass die Reihenfolge der Beobachtungen in beiden Arrays übereinstimmt – jede Zeile muss derselben Person entsprechen. Ein häufiger Flüchtigkeitsfehler ist das versehentliche Mischen der Reihenfolge beim Einlesen aus verschiedenen Datenquellen.

Einstichproben-t-Test in Python

Manchmal möchten Sie prüfen, ob der Mittelwert Ihrer Stichprobe von einem theoretischen oder in der Literatur berichteten Referenzwert abweicht. Hier kommt der Einstichproben-t-Test zum Einsatz.

Python
from scipy import stats
import numpy as np

# Beispiel: Selbstwirksamkeitswerte Ihrer Stichprobe
werte = np.array([3.8, 4.1, 3.9, 4.3, 3.7, 4.0, 4.2, 3.6, 4.1, 3.8])

# Test gegen den Skalenmittelpunkt (z. B. 3.5 auf einer 5-Punkt-Skala)
referenzwert = 3.5
t_stat, p_wert = stats.ttest_1samp(werte, popmean=referenzwert)

print(f"Stichprobenmittelwert: M = {werte.mean():.3f}")
print(f"t({len(werte)-1}) = {t_stat:.3f}, p = {p_wert:.3f}")

Effektstärke berechnen: Cohens d

Ein statistisch signifikantes Ergebnis sagt noch nichts darüber aus, wie bedeutsam der Unterschied in der Praxis ist. Deshalb sollten Sie immer die Effektstärke berichten – für den t-Test ist das standardmäßig Cohens d.

Cohens d (unabhängige Stichproben)

Die gepoolte Standardabweichung berechnet sich als:

Gepoolte Standardabweichung

Da scipy selbst kein Cohens d liefert, berechnen Sie es manuell oder nutzen die Bibliothek pingouin, die diesen Wert direkt ausgibt:

Python
import numpy as np

def cohens_d(gruppe1, gruppe2):
    n1, n2 = len(gruppe1), len(gruppe2)
    s1, s2 = np.std(gruppe1, ddof=1), np.std(gruppe2, ddof=1)
    s_pooled = np.sqrt(((n1 - 1) * s1**2 + (n2 - 1) * s2**2) / (n1 + n2 - 2))
    return (np.mean(gruppe1) - np.mean(gruppe2)) / s_pooled

# Mit den Beispieldaten von oben
d = cohens_d(gruppe_a, gruppe_b)
print(f"Cohens d = {d:.3f}")

# Alternativ mit pingouin (pip install pingouin)
# import pingouin as pg
# pg.ttest(gruppe_a, gruppe_b, correction=True)

Orientierungswerte für Cohens d

Interpretation von Cohens d

  • d ≈ 0.20: kleiner Effekt
  • d ≈ 0.50: mittlerer Effekt
  • d ≈ 0.80: großer Effekt

Diese Konventionen stammen von Jacob Cohen und sind in der sozialwissenschaftlichen Literatur weit verbreitet. In manchen Fächern gelten andere Maßstäbe – prüfen Sie im Zweifel, was in Ihrer Disziplin üblich ist. Wer die statistische Auswertung für eine Abschlussarbeit vorbereitet, sollte die Effektstärke grundsätzlich neben dem p-Wert berichten – das ist heute methodischer Standard.

Ergebnisse korrekt berichten

Die Ergebnisse eines t-Tests werden in wissenschaftlichen Arbeiten nach einem standardisierten Schema berichtet. Orientieren Sie sich am folgenden Format:

Es wurde ein Welch-t-Test für unabhängige Stichproben durchgeführt. Die Gruppe A erzielte signifikant höhere Punktzahlen (M = 72.40, SD = 4.48) als Gruppe B (M = 61.20, SD = 3.49), t(17.43) = 6.37, p < .001, d = 2.77, 95%-KI [7.12, 15.28].

Beachten Sie dabei folgende Punkte:

  • Die Freiheitsgrade beim Welch-t-Test sind nicht ganzzahlig – das ist korrekt und kein Fehler
  • Bei p < .001 schreibt man nicht den genauen Wert, sondern diese Konvention
  • Das Konfidenzintervall bezieht sich auf die Differenz der Mittelwerte, nicht auf einzelne Mittelwerte
  • Freiheitsgrade, Teststatistik, p-Wert, Effektstärke und KI sollten vollständig angegeben werden

Eine methodisch fundierte Grundlage für den Zweistichproben-t-Test bieten auch die formalen Definitionen und ein numerisches Berichtsbeispiel mit echten Fahrzeugdaten, an dem sich der korrekte Berichtsweg gut nachvollziehen lässt.

Wer seine Ergebnisse anschließend für die Abschlussarbeit aufbereiten möchte, findet im Beitrag zu Python-Ergebnissen für Abschlussarbeiten exportieren praktische Hinweise zur Formatierung und Tabellenausgabe.

Häufige Fehler und wie Sie sie vermeiden

Student statt Welch verwenden

Der klassische Student-t-Test setzt Varianzhomogenität voraus. Bei ungleichen Varianzen und ungleichen Stichprobengrößen kann er zu stark verzerrten Ergebnissen führen. Der Welch-t-Test ist robuster und hat bei erfüllter Varianzhomogenität kaum Nachteile – er ist daher in den meisten Situationen die bessere Wahl. Setzen Sie deshalb bewusst equal_var=False, statt auf die Standardeinstellung zu vertrauen.

Einseitige vs. zweiseitige Hypothese verwechseln

Standardmäßig führt ttest_ind() einen zweiseitigen Test durch. Wenn Sie eine gerichtete Hypothese haben (z. B. „Gruppe A schneidet besser ab als Gruppe B“), können Sie alternative='greater' setzen – aber nur, wenn diese Richtung vor der Datenerhebung festgelegt wurde. Eine Hypothese post-hoc zu ändern, um ein signifikantes Ergebnis zu erzielen, ist methodisch nicht zulässig.

Fehlende Werte ignorieren

Enthält Ihr Datensatz NaN-Werte, liefert ttest_ind() standardmäßig ebenfalls NaN. Setzen Sie nan_policy='omit', um fehlende Werte listenweise auszuschließen. Wie Sie fehlende Werte systematisch behandeln, bevor Sie inferenzstatistische Verfahren anwenden, ist ein eigenes Thema – einen Überblick dazu finden Sie im Beitrag zu fehlenden Werten in Python.

Signifikanz mit Relevanz verwechseln

Ein p-Wert unter 0.05 bedeutet nicht automatisch, dass der Unterschied praktisch bedeutsam ist. Bei großen Stichproben werden selbst minimale Unterschiede statistisch signifikant. Berichten Sie deshalb immer auch die Effektstärke – sie ist das entscheidende Maß für die inhaltliche Bedeutung Ihres Befunds.

Einfach erklärt Wenn Sie unsicher sind, welche t-Test-Variante für Ihr Design passt oder wie Sie die Voraussetzungen korrekt prüfen, bietet das Team von QuantExpert methodische Unterstützung bei statistischen Auswertungen in Python – von der Hypothesenformulierung bis zur Ergebnisinterpretation.
t-Test Python scipy Hypothesentest Welch-t-Test Cohens d Effektstärke Inferenzstatistik

Ihr persönlicher Ansprechpartner

Maximilian Fuchs, M. Sc.

Teilen Sie uns mit, wie wir Ihnen helfen können.

  • Persönlicher Ansprechpartner
  • Schnelle Rückmeldung
  • Transparente Preise
  • Schutz Ihrer Daten

Fragen? Einfach anrufen!