Ändern Sie Pandas DataFrame von breit zu lang
- Breites Datenformat vs. langes Datenformat in Pandas
- Verwendung des Wide Data Formats
- Verwendung des Langdatenformats
-
Verwenden Sie
pd.melt()
, um Pandas DataFrame vom Breit- ins Langformat umzugestalten -
Verwenden Sie
pd.unstack()
, um Pandas DataFrame vom Breit- ins Langformat umzugestalten -
Verwenden Sie
pd.wide_to_long()
, um Pandas DataFrame vom Breit- ins Langformat umzugestalten
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.
- Breites Datenformat – Die Werte in der ersten Spalte wiederholen sich nicht.
- 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.
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.
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.
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()
.
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:
df
- Dies ist der Datenrahmen, den wir umformen möchten.stubnames
- Wir können auch Gruppennamen (Präfixe) sagen, die gruppiert werden müssen. In unserem Fall sind diesLabor
undTheorie
.i
- Es ist die Identifikatorvariable(n), die nicht gestapelt werden soll(en).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.
Verwandter Artikel - Pandas DataFrame
- Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- Wie konvertiert man eine Fließkommazahl in eine Ganzzahl in Pandas DataFrame
- Wie man Pandas-DataFrame nach den Werten einer Spalte sortiert
- Wie erhält man das Aggregat der Pandas gruppenweise und sum