Ändern Sie Pandas DataFrame von breit zu lang

Mehvish Ashiq 15 Februar 2024
  1. Breites Datenformat vs. langes Datenformat in Pandas
  2. Verwendung des Wide Data Formats
  3. Verwendung des Langdatenformats
  4. Verwenden Sie pd.melt(), um Pandas DataFrame vom Breit- ins Langformat umzugestalten
  5. Verwenden Sie pd.unstack(), um Pandas DataFrame vom Breit- ins Langformat umzugestalten
  6. Verwenden Sie pd.wide_to_long(), um Pandas DataFrame vom Breit- ins Langformat umzugestalten
Ändern Sie Pandas DataFrame von breit zu lang

Die Umgestaltung des Pandas-Datenrahmens ist eine der am häufigsten verwendeten Daten-Wrangling-Aufgaben in der Datenanalyse. Es wird auch als Transportieren, Entschwenken/Schwenken eines Tisches von breit nach lang angesprochen.

In diesem Tutorial lernen wir den Unterschied zwischen breiten und langen Datenformaten kennen, was zu ihrer Verwendung führt, gefolgt von verschiedenen Codebeispielen, die zeigen, wie der Pandas-Datenrahmen von breit in lang umgeformt wird.

Breites Datenformat vs. langes Datenformat in Pandas

Wir können einen Datensatz in zwei Formaten haben – entweder breit oder lang. Der Hauptunterschied zwischen breiten und langen Datenformaten ist unten angegeben.

  1. Breites Datenformat – Die Werte in der ersten Spalte wiederholen sich nicht.
  2. Langes Datenformat – Die Werte in der ersten Spalte wiederholen sich.

Nehmen wir die Beispieldatenrahmen mit den Prüfungsnoten Labor und Theorie für die Gruppen A, B, C und D, um beide Formate klar zu verstehen.

Pandas-Datenrahmen von breit nach lang umformen - breites vs. langes Datenformat

Wie wir sehen können, haben beide Datenrahmen die gleichen Informationen, aber in unterschiedlichen Formaten.

Wann ist welches Datenformat zur Darstellung des Datensatzes zu verwenden? Es kommt darauf an, was wir mit den Daten machen wollen.

Verwendung des Wide Data Formats

Das breite Datenformat wird verwendet, um reale Daten aufzuzeichnen, da es für unser Gehirn leicht verständlich ist. Wir verwenden dieses Datenformat auch, wenn wir Daten analysieren.

Nehmen wir das vorherige Beispiel, Noten für die Prüfungen Labor und Theorie zu haben.

Wenn wir den Durchschnitt der Labor- und Theorie-Prüfungen pro Gruppe berechnen möchten, wäre es einfacher, die Daten im breiten Format zu halten, da es einfach wäre, die Labor- und Theorie-Werte für jede Gruppe in der zu lesen gleichen Datensatz (Zeile).

Siehe folgenden Screenshot.

Pandas-Datenrahmen von breit auf lang umformen - Verwendung des breiten Datenformats

Verwendung des Langdatenformats

Wir verwenden hauptsächlich das lange Datenformat, wenn wir mehrere Variablen in einem Diagramm mit einem statistischen Tool, z. B. der Programmiersprache R, visualisieren.

Wir müssen das breite Datenformat in das lange Datenformat umwandeln, damit die Software das Diagramm erstellen kann, z. B. mehrere Spalten zeichnen, Heatmap erstellen usw. Manchmal müssen wir auch Datensätze für das Data Wrangling mit Python umgestalten.

Verwenden Sie pd.melt(), um Pandas DataFrame vom Breit- ins Langformat umzugestalten

Beispielcode:

import pandas as pd

df = pd.DataFrame(
    {
        "Groups": ["A", "B", "C", "D"],
        "lab": [25, 21, 14, 22],
        "theory": [60, 55, 49, 69],
    }
)

print("Wide Data Frame:\n")
print(df)

df = pd.melt(df, id_vars="Groups", value_vars=["lab", "theory"])

print("\n\nLong Data Frame:\n")
print(df)

AUSGANG:

Wide Data Frame:

  Groups  lab  theory
0      A   25      60
1      B   21      55
2      C   14      49
3      D   22      69


Long Data Frame:

  Groups variable  value
0      A      lab     25
1      B      lab     21
2      C      lab     14
3      D      lab     22
4      A   theory     60
5      B   theory     55
6      C   theory     49
7      D   theory     69

Hier haben wir einen Datenrahmen mit drei Spalten Gruppen, Labor und Theorie in einem breiten Datenformat, den wir mit der Funktion pd.melt() in ein langes Datenformat konvertieren.

pd.melt() wird verwendet, um einen Datenrahmen von einem breiten in ein langes Datenformat zu entpivozieren (optional, wobei die Identifikatoren gesetzt bleiben). Es wandelt einen Datenrahmen in ein Format um, in dem eine oder mehrere Spalten/Felder Kennungsvariablen (id_vars) sind.

Mit Ausnahme der id_vars gelten alle anderen Spalten als Messgrössen (value_vars). Diese werden nicht zur Zeilenachse geschwenkt, sodass zwei Nicht-Identifikator-Spalten (variable und Wert) übrig bleiben.

Verwenden Sie pd.unstack(), um Pandas DataFrame vom Breit- ins Langformat umzugestalten

Beispielcode:

import pandas as pd

df = pd.DataFrame(
    {
        "Groups": ["A", "B", "C", "D"],
        "lab": [25, 21, 14, 22],
        "theory": [60, 55, 49, 69],
    }
)

print("Wide Data Frame:\n")
print(df)

df = df.unstack()

print("\n\nLong Data Frame:\n")
print(df)

AUSGANG:

Wide Data Frame:

  Groups  lab  theory
0      A   25      60
1      B   21      55
2      C   14      49
3      D   22      69


Long Data Frame:

Groups  0     A
        1     B
        2     C
        3     D
lab     0    25
        1    21
        2    14
        3    22
theory  0    60
        1    55
        2    49
        3    69
dtype: object

Dieses Beispiel verwendet denselben Datenrahmen mit drei Spalten, Gruppen, Labor und Theorie, aber hier verwenden wir DataFrame.unstack, um den Datenrahmen von einem breiten in ein langes Datenformat umzugestalten.

Es schwenkt die Ebene der (notwendigerweise hierarchischen) Indexbeschriftungen und gibt einen Datenrahmen zurück, der eine neue Ebene von Feld-/Spaltenbeschriftungen enthält, deren innerste Ebene die geschwenkten Indexbeschriftungen enthält.

Denken Sie daran, dass wir eine Reihe als Ausgabe erhalten, wenn ein Index nicht der MultiIndex ist. Wenn für ein bestimmtes Problem eine flexible und schnelle Lösung erforderlich ist, bevorzugen Sie außerdem pd.melt() anstelle von DataFrame.unstack().

Verwenden Sie pd.wide_to_long(), um Pandas DataFrame vom Breit- ins Langformat umzugestalten

Beispielcode:

import pandas as pd

df = pd.DataFrame(
    {
        "Groups": ["A", "B", "C", "D"],
        "lab1": [25, 21, 14, 22],
        "lab2": [25, 21, 14, 22],
        "theory1": [60, 55, 49, 69],
        "theory2": [60, 55, 49, 69],
    }
)

print("Wide Data Frame:\n")
print(df)

df = pd.wide_to_long(df, stubnames=["lab", "theory"], i="Groups", j="Exams")

print("\n\nLong Data Frame:\n")
print(df)

AUSGANG:

Wide Data Frame:

  Groups  lab1  lab2  theory1  theory2
0      A    25    25       60       60
1      B    21    21       55       55
2      C    14    14       49       49
3      D    22    22       69       69


Long Data Frame:

Groups Exams  lab  theory
A      1       25      60
B      1       21      55
C      1       14      49
D      1       22      69
A      2       25      60
B      2       21      55
C      2       14      49
D      2       22      69

Hier haben wir einen Datenrahmen mit den Markierungen lab1, lab2, Theorie1 und Theorie2 für vier Gruppen: A, B, C und D. Bevor wir die Funktion pd.wide_to_long() verstehen, schauen wir uns das folgende Bild an, um zu verstehen, wie das breite Datenformat in das lange Datenformat umgeformt wird.

Ändern Sie den Pandas-Datenrahmen von breit zu lang - visualisieren Sie die Funktion breit zu lang

Das pd.wide_to_long() funktioniert auf eine ganz besondere Weise, es verwendet tatsächlich die pd.melt()-Funktion unter der Haube. Es akzeptiert vier obligatorische Parameter, die wir weiter unten verstehen werden, aber das Wesentliche ist, wie die Spaltennamen gebildet und angezeigt werden.

Siehe das folgende Spaltenformat für die Funktion wide_to_long().

Pandas-Datenrahmen von breit zu lang umformen - breite zu langen Variablennamen

Wir übergeben vier Parameter an die Funktion pd.wide_to_long(), um den Datenrahmen vom breiten zum langen Datenformat umzuformen. Die vier Parameter, die wir verwendet haben, sind unten aufgeführt:

  1. df - Dies ist der Datenrahmen, den wir umformen möchten.
  2. stubnames - Wir können auch Gruppennamen (Präfixe) sagen, die gruppiert werden müssen. In unserem Fall sind dies Labor und Theorie.
  3. i - Es ist die Identifikatorvariable(n), die nicht gestapelt werden soll(en).
  4. j - Der Name der Spalte, der die Suffixe enthält, oder wir können die Bezeichnungen der Spalten sagen.

Die optionalen Parameter sind sep (Trennzeichen) und suffix. Mehr über pd.melt(), pd.wide_to_long() und DataFrame.unstack() erfahren Sie hier.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Pandas DataFrame