Um pandas.DataFrame und pandas.Series zu sortieren, verwenden Sie sort_values() und sort_index(). Sie können in aufsteigender oder absteigender Reihenfolge oder nach mehreren Spalten sortieren.
Beachten Sie, dass die Methode sort() in der alten Version veraltet ist.
Dieser Artikel hat folgenden Inhalt.
- Sortieren nach Element (Daten):
sort_values()
- Aufsteigend oder absteigend:
ascending
- Nach mehreren Spalten sortieren
- Umgang mit NaN:
na_position
- Originalobjekt ändern:
inplace
- In Zeilenrichtung sortieren:
axis
- Aufsteigend oder absteigend:
- Sortieren nach Index/Spalten (Zeilen-/Spaltennamen):
sort_index()
- Nach Index sortieren (Zeilenname)
- Aufsteigend oder absteigend:
ascending
- Originalobjekt ändern:
inplace
- Nach Spalten sortieren (Spaltenname):
axis
Die folgenden Daten werden als Beispiel verwendet.
import pandas as pd
df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Das Beispiel verwendet pandas.DataFrame, aber pandas.Series bietet auch reset_index(). Die Verwendung ist die gleiche.
Sortieren nach Element (Daten):sort_values()
Verwenden Sie zum Sortieren nach Elementwert die Methode sort_values().
Geben SIE die Spaltenbezeichnung (Spaltenname) an, nach der SIE im ersten Argument sortieren möchten.
df_s = df.sort_values('state')
print(df_s)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
Verwenden Sie reset_index(), um den Index neu zuzuweisen.
Aufsteigend oder absteigend:ascending
Standardmäßig wird in aufsteigender Reihenfolge sortiert. Wenn Sie eine absteigende Reihenfolge benötigen, setzen Sie das aufsteigende Argument auf False.
df_s = df.sort_values('state', ascending=False)
print(df_s)
# name age state point
# 3 Dave 68 TX 70
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
Nach mehreren Spalten sortieren
Wenn SIE das erste Argument als Liste angeben, können Sie nach mehreren Spalten sortieren.
Sortieren Sie von hinten in der Liste der Reihe nach. Anschließend WIRD nach der ersten angegebenen Spalte in der Liste sortiert.
df_s = df.sort_values(['state', 'age'])
print(df_s)
# name age state point
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 1 Bob 42 CA 92
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
df_s = df.sort_values(['age', 'state'])
print(df_s)
# name age state point
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 1 Bob 42 CA 92
# 3 Dave 68 TX 70
Wird das Argument aufsteigend in einer Liste angegeben, kann für jede Spalte aufsteigend/absteigend sortiert werden.
df_s = df.sort_values(['age', 'state'], ascending=[True, False])
print(df_s)
# name age state point
# 2 Charlie 18 CA 70
# 0 Alice 24 NY 64
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
# 1 Bob 42 CA 92
# 3 Dave 68 TX 70
Umgang mit NaN:na_position
Wenn ein Wert NaN fehlt, wird er standardmäßig am Ende aufgeführt.
df_nan = df.copy()
df_nan.iloc[:2, 1] = pd.np.nan
print(df_nan)
# name age state point
# 0 Alice NaN NY 64
# 1 Bob NaN CA 92
# 2 Charlie 18.0 CA 70
# 3 Dave 68.0 TX 70
# 4 Ellen 24.0 CA 88
# 5 Frank 30.0 NY 57
df_nan_s = df_nan.sort_values('age')
print(df_nan_s)
# name age state point
# 2 Charlie 18.0 CA 70
# 4 Ellen 24.0 CA 88
# 5 Frank 30.0 NY 57
# 3 Dave 68.0 TX 70
# 0 Alice NaN NY 64
# 1 Bob NaN CA 92
Wenn das Argument na_position=’first‘ ist, WIRD es oben aufgeführt.
df_nan_s = df_nan.sort_values('age', na_position='first')
print(df_nan_s)
# name age state point
# 0 Alice NaN NY 64
# 1 Bob NaN CA 92
# 2 Charlie 18.0 CA 70
# 4 Ellen 24.0 CA 88
# 5 Frank 30.0 NY 57
# 3 Dave 68.0 TX 70
In den following Artikeln erfahren SIE, wie SIE fehlende Werte entfernen und ersetzen.
Originalobjekt ändern:inplace
Standardmäßig werden neue sortierte Objekte zurückgegeben, aber wenn das Inplace-Argument auf True gesetzt ist, wird das ursprüngliche Objekt selbst geändert.
df.sort_values('state', inplace=True)
print(df)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
In Zeilenrichtung sortieren:axis
Wie in den vorherigen Beispielen wird standardmäßig in Spaltenrichtung (vertikale Richtung) sortiert.
Wenn Sie in Zeilenrichtung sortieren möchten, setzen Sie die Argumentachse auf 1. Andere Argumente können auf die gleiche Weise wie in den vorherigen Beispielen verwendet werden.
Da beim Mischen einer Zahl und einer Zeichenfolge ein Fehlerauftritt, werden in diesem Beispiel Zeichenfolgenspalten gelöscht, sodass nur numerische Spalten verwendet werden. Siehe den folgenden Artikel für die Methode drop().
df_d = df.drop(['name', 'state'], axis=1)
print(df_d)
# age point
# 1 42 92
# 2 18 70
# 4 24 88
# 0 24 64
# 5 30 57
# 3 68 70
df_d .sort_values(by=1, axis=1, ascending=False, inplace=True)
print(df_d)
# point age
# 1 92 42
# 2 70 18
# 4 88 24
# 0 64 24
# 5 57 30
# 3 70 68
Sortieren nach Index/Spalten (Zeilen-/Spaltennamen):sort_index()
Um nach Index/Spalten (Zeilen-/Spaltennamen) zu sortieren, verwenden Sie die Methode sort_index().
Nach Index sortieren (Zeilenname)
Standardmäßig sortiert sort_index() in Spaltenrichtung (vertikale Richtung) gemäß dem Zeilennamen (Label).
print(df)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
df_s = df.sort_index()
print(df_s)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Aufsteigend oder absteigend:ascending
Wie bei sort_values() wird standardmäßig in aufsteigender Reihenfolge sortiert. Wenn Sie eine absteigende Reihenfolge benötigen, setzen Sie das aufsteigende Argument auf False.
df_s = df.sort_index(ascending=False)
print(df_s)
# name age state point
# 5 Frank 30 NY 57
# 4 Ellen 24 CA 88
# 3 Dave 68 TX 70
# 2 Charlie 18 CA 70
# 1 Bob 42 CA 92
# 0 Alice 24 NY 64
Originalobjekt ändern:inplace
Wie bei sort_values() can SIE das Argument an Ort und Stelle verwenden. Wenn Sie es auf True setzen, wird das ursprüngliche Objekt geändert.
df.sort_index(inplace=True)
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Nach Spalten sortieren (Spaltenname):axis
Durch das Setzen von axis=1 WIRD in Zeilenrichtung (horizontale Richtung) nach den Spalten (Spaltenname) sortiert. Andere Argumente können wie in den vorherigen Beispielen verwendet werden.
df_s = df.sort_index(axis=1)
print(df_s)
# age name point state
# 0 24 Alice 64 NY
# 1 42 Bob 92 CA
# 2 18 Charlie 70 CA
# 3 68 Dave 70 TX
# 4 24 Ellen 88 CA
# 5 30 Frank 57 NY
df.sort_index(axis=1, ascending=False, inplace=True)
print(df)
# state point name age
# 0 NY 64 Alice 24
# 1 CA 92 Bob 42
# 2 CA 70 Charlie 18
# 3 TX 70 Dave 68
# 4 CA 88 Ellen 24
# 5 NY 57 Frank 30