Python
Pandas Unstack: Ein Anfängerleitfaden zum Umgestalten von Daten

Pandas Unstack: Ein Anfängerleitfaden zum Umgestalten von Daten

MoeNagy Dev

Verständnis von pandas unstack

Erklärung von pandas unstack

Was ist pandas unstack?

unstack() ist eine Funktion von Pandas, die ein DataFrame von einem langen Format in ein breites Format umwandelt. Sie nimmt einen mehrstufigen Spaltenindex und "entpackt" ihn, indem sie ein neues DataFrame erstellt, bei dem ein oder mehrere Indexebenen zu Spalten werden.

Wie unterscheidet es sich von pivot und melt?

Die Funktion unstack() ähnelt der Funktion pivot(), hat aber eine andere Verwendung. pivot() wird verwendet, um Daten vom langen Format in das breite Format umzuwandeln, während unstack() verwendet wird, um Daten vom breiten Format in das lange Format umzuwandeln.

Die Funktion melt() hingegen wird verwendet, um Daten vom breiten Format in das lange Format umzuwandeln, was das Gegenteil von dem ist, was unstack() tut.

Wann sollte man pandas unstack verwenden?

Sie sollten unstack() verwenden, wenn Sie ein DataFrame mit einem mehrstufigen Spaltenindex haben und es in ein breites Format umwandeln möchten, wobei die Ebenen des Spaltenindex zu neuen Spalten im DataFrame werden.

Vorbereiten der Daten

Importieren der erforderlichen Bibliotheken

import pandas as pd
import numpy as np

Erstellen eines BeispieldataFrames

# Ein BeispieldataFrame erstellen
data = {
    ('Filiale A', 'Umsatz'): [100, 120, 80, 90, 110],
    ('Filiale A', 'Gewinn'): [20, 25, 15, 18, 22],
    ('Filiale B', 'Umsatz'): [150, 180, 120, 160, 200],
    ('Filiale B', 'Gewinn'): [30, 35, 25, 32, 40]
}
 
df = pd.DataFrame(data)

Erkunden der Struktur des DataFrames

print(df)
           (Filiale A, Umsatz)  (Filiale A, Gewinn)  (Filiale B, Umsatz)  (Filiale B, Gewinn)
0                         100                   20                 150                   30
1                         120                   25                 180                   35
2                          80                   15                 120                   25
3                          90                   18                 160                   32
4                         110                   22                 200                   40

Wie Sie sehen können, hat das DataFrame einen mehrstufigen Spaltenindex, wobei die erste Ebene die Filiale und die zweite Ebene die Metrik (Umsatz oder Gewinn) darstellt.

Grundlagen von pandas unstack

Entpacken eines Index mit einer Ebene

Um einen Index mit einer Ebene zu entpacken, können Sie die Funktion unstack() ohne Argumente verwenden:

df_entpackt = df.unstack()
print(df_entpackt)
                Umsatz        Gewinn
             Filiale A Filiale B Filiale A Filiale B
0                  100       150        20        30
1                  120       180        25        35
2                   80       120        15        25
3                   90       160        18        32
4                  110       200        22        40

Das resultierende DataFrame hat die Filialnamen als Spaltenindex und die ursprünglichen Spaltennamen (Umsatz und Gewinn) sind zum Zeilenindex geworden.

Entpacken eines Index mit mehreren Ebenen

Wenn das DataFrame einen mehrstufigen Spaltenindex hat, können Sie die Ebene angeben, die entpackt werden soll:

df_entpackt = df.unstack(level=0)
print(df_entpackt)
                 (Umsatz, Filiale A)  (Umsatz, Filiale B)  (Gewinn, Filiale A)  (Gewinn, Filiale B)
0                               100                 150                   20                 30
1                               120                 180                   25                 35
2                                80                 120                   15                 25
3                                90                 160                   18                 32
4                               110                 200                   22                 40

In diesem Fall sind die Filialnamen zum Spaltenindex geworden und die ursprünglichen Spaltennamen (Umsatz und Gewinn) sind jetzt Teil des mehrstufigen Spaltenindex.

Verständnis der Struktur des resultierenden DataFrames

Das entpackte DataFrame hat einen mehrstufigen Spaltenindex, wobei die erste Ebene die ursprünglichen Spaltennamen repräsentiert und die zweite Ebene die Werte darstellt, die zuvor im Spaltenindex waren.

Diese Struktur kann für bestimmte Arten von Datenanalyse und Visualisierung nützlich sein, da sie es Ihnen ermöglicht, auf einfache Weise auf die Daten zuzugreifen und sie auf verschiedene Weise zu manipulieren.

Umgang mit fehlenden Daten in pandas unstack

Umgang mit NaN-Werten

Wenn es fehlende Werte im ursprünglichen DataFrame gibt, führt die Funktion unstack() NaN-Werte im resultierenden DataFrame ein:

# Fügen Sie dem BeispieldataFrame einige fehlende Werte hinzu
data = {
    ('Filiale A', 'Umsatz'): [100, 120, 80, np.nan, 110],
    ('Filiale A', 'Gewinn'): [20, 25, 15, 18, 22],
    ('Filiale B', 'Umsatz'): [150, 180, 120, 160, 200],
    ('Filiale B', 'Gewinn'): [30, 35, 25, 32, np.nan]
}
 
df = pd.DataFrame(data)
df_entpackt = df.unstack()
print(df_entpackt)
                Umsatz        Gewinn
             Filiale A Filiale B Filiale A Filiale B
0                  100       150        20       30.0
1                  120       180        25       35.0
2                   80       120        15       25.0
3                  NaN       160        18       32.0
4                  110       200        22        NaN

Sie sehen, dass die fehlenden Werte im ursprünglichen DataFrame auch im entpackten DataFrame enthalten sind.

Füllen der fehlenden Werte

Um mit den fehlenden Werten umzugehen, können Sie die Methode fillna() verwenden, um sie durch einen bestimmten Wert zu ersetzen:

df_entpackt = df.unstack().fillna(0)
print(df_entpackt)
                Umsatz        Gewinn
             Filiale A Filiale B Filiale A Filiale B
0                  100       150        20       30.0
1                  120       180        25       35.0
2                   80       120        15       25.0
3                    0       160        18       32.0
4                  110       200        22        0.0

title: Füllen von fehlenden Werten in Pandas DataFrame language: de

Diese Datei erklärt, wie man fehlende Werte in einem Pandas DataFrame durch 0 oder andere Werte ersetzt.

In diesem Beispiel füllen wir die fehlenden Werte mit 0.

Festlegen des Füllwerts

Sie können auch einen anderen Füllwert festlegen, wie z.B. den Durchschnitt oder das Median der Spalte:

# Füllen Sie die fehlenden Werte mit dem Spaltenmittelwert
df_unstacked = df.unstack().fillna(df.mean())
print(df_unstacked)
                 Verkäufe        Gewinn
                 Filiale A Filiale B Filiale A Filiale B
0                    100     150       20     32.5
1                    120     180       25     32.5
2                     80     120       15     32.5
3                    95.0     160       18     32.5
4                    110     200       22     22.0

In diesem Beispiel füllen wir die fehlenden Werte mit dem Durchschnitt der jeweiligen Spalten.

Fortgeschrittene Techniken mit Pandas Unstack

Unstacking mit spezifischen Ebenen

Sie können auch bestimmte Ebenen des Spaltenindex statt aller Ebenen unstacken:

# Lösen Sie die zweite Ebene des Spaltenindexes auf
df_unstacked = df.unstack(level=1)
print(df_unstacked)
                   Verkäufe   Gewinn
Filiale A  0            100       20
         1            120       25
         2             80       15
         3            NaN       18
         4            110       22
Filiale B  0            150       30
         1            180       35
         2            120       25
         3            160       32
         4            200       NaN

In diesem Fall sind die Filialnamen zum Zeilenindex geworden und die ursprünglichen Spaltennamen (Verkäufe und Gewinn) zum Spaltenindex.

Kombination von Unstack mit anderen Pandas-Operationen

Sie können die Funktion unstack() mit anderen Pandas-Operationen wie reset_index() oder rename() kombinieren, um die Daten weiter zu manipulieren:

# Unstacken und den Index zurücksetzen
df_unstacked = df.unstack().reset_index()
print(df_unstacked)
  level_0 level_1   0         1
0  Filiale A  Verkäufe  100       20
1  Filiale A  Verkäufe  120       25
2  Filiale A  Verkäufe   80       15
3  Filiale A  Verkäufe  NaN       18
4  Filiale A  Verkäufe  110       22
5  Filiale B  Verkäufe  150       30
6  Filiale B  Verkäufe  180       35
7  Filiale B  Verkäufe  120       25
8  Filiale B  Verkäufe  160       32
9  Filiale B  Verkäufe  200       NaN

In diesem Beispiel haben wir den DataFrame unstacked und dann den Index zurückgesetzt, was einen neuen DataFrame mit den unstacked Werten in einer Spalte erstellt.

Zurücksetzen des Index nach dem Unstacken

Wenn Sie den Index nach dem Unstacken zurücksetzen möchten, können Sie die Methode reset_index() verwenden:

# Unstacken und den Index zurücksetzen
df_unstacked = df.unstack().reset_index()
print(df_unstacked)
  level_0 level_1   0         1
0  Filiale A  Verkäufe  100       20
1  Filiale A  Verkäufe  120       25
2  Filiale A  Verkäufe   80       15
3  Filiale A  Verkäufe  NaN       18
4  Filiale A  Verkäufe  110       22
5  Filiale B  Verkäufe  150       30
6  Filiale B  Verkäufe  180       35
7  Filiale B  Verkäufe  120       25
8  Filiale B  Verkäufe  160       32
9  Filiale B  Verkäufe  200       NaN

Damit wird ein neuer DataFrame mit den unstacked Werten in einer Spalte erstellt, und die ursprünglichen Indexebenen sind nun Spalten im DataFrame.

Visualisierung von unstacked Daten

Erstellen von Heatmaps

Eine Möglichkeit, unstacked Daten zu visualisieren, besteht darin, eine Heatmap mit der seaborn-Bibliothek zu erstellen:

import seaborn as sns
import matplotlib.pyplot as plt
 
# Den DataFrame unstacken
df_unstacked = df.unstack()
 
# Eine Heatmap erstellen
plt.figure(figsize=(8, 6))
sns.heatmap(df_unstacked, annot=True, cmap="YlOrRd")
plt.title("Verkäufe und Gewinn nach Filiale")
plt.show()

Dies erstellt eine Heatmap, die die Verkaufs- und Gewinndaten für jede Filiale visualisiert.

Erzeugung von Pivot-Tabellen

Sie können auch die pivot_table()-Funktion verwenden, um aus den unstacked Daten eine Pivot-Tabelle zu erstellen:

# Eine Pivot-Tabelle erstellen
pivot_table = df.pivot_table(index=['Filiale'], columns=['Metrik'], values=['Wert'])
print(pivot_table)
                 Wert
Metrik   Gewinn  Verkäufe
Filiale A       20   100
        25    120
        15     80
        18     NaN
        22    110
Filiale B       30   150
        35    180
        25    120
        32    160
        NaN   200

Diese Pivot-Tabelle hat die Filialnamen als Zeilenindex und die Metriknamen als Spaltenindex, mit den entsprechenden Werten in den Zellen.

Plotten von unstacked Daten

Sie können auch die unstacked Daten direkt plotten, z.B. indem Sie ein Balkendiagramm oder ein Liniendiagramm erstellen:

# Die unstacked Daten plotten
df_unstacked.plot(kind="bar", figsize=(10, 6))
plt.title("Verkäufe und Gewinn nach Filiale")
plt.xlabel("Filiale")
plt.ylabel("Wert")
plt.show()

Dies erstellt ein Balkendiagramm, das die Verkaufs- und Gewinnwerte für jede Filiale zeigt.

Praktische Anwendungen von Pandas Unstack

Analyse von Verkaufsdaten

Unstacking kann nützlich sein, um Verkaufsdaten zu analysieren, insbesondere wenn Sie einen mehrschichtigen Spaltenindex haben. Sie können die unstacked Daten verwenden, um Pivot-Tabellen, Heatmaps oder andere Visualisierungen zu erstellen, um Verkaufstrends und die Performance in verschiedenen Filialen, Produkten oder Zeiträumen besser zu verstehen.

Umgestaltung von Zeitreihendaten

unstack() kann auch nützlich sein, um Zeitreihendaten umzugestalten, bei denen Sie einen mehrschichtigen Index mit Zeit und einer anderen Dimension haben (z.B. Ort, Produkt). Durch das Unstacking der Daten können Sie einen DataFrame im Wide-Format erstellen, der für bestimmte Arten von Analysen und Visualisierungen einfacher zu handhaben ist.

Umgang mit Umfragedaten

Im Fall von Umfragedaten, bei denen Sie Antworten auf verschiedene Fragen für jeden Teilnehmer haben, kann unstack() verwendet werden, um Daten von einem Langformat in ein Breitformat zu transformieren, um die Beziehungen zwischen verschiedenen Umfragefragen einfacher analysieren zu können.

Fehlerbehebung und bewährte Verfahren

Häufige Probleme und Fehlermeldungen

Ein häufiges Problem bei 'unstack()' ist, dass es NaN-Werte einführen kann, wenn es ... Durch das Verständnis und die Anwendung dieser Techniken wirst du den Weg zu einem versierten Python-Programmierer ebnen. Denke daran, regelmäßig zu üben, verschiedene Codebeispiele auszuprobieren und das umfangreiche Ökosystem von Python-Bibliotheken und -Frameworks zu erkunden, um dein Wissen und deine Fähigkeiten zu erweitern.

Viel Spaß beim Programmieren!

MoeNagy Dev