
Per ordinare pandas.DataFrame e pandas.Series, utilizzare sort_values() e sort_index(). È possibile ordinare in ordine crescente o decrescente oppure in base a più colonne.
Si noti che il metodo sort() nella vecchia versione è obsoleto.
In questo articolo vengono descritti i seguenti contenuti.
- Ordina per elemento (dati):
sort_values()
- Crescente o discendente:
ascending
- Ordina per più colonne
- Maniglia NaN:
na_position
- Cambia oggetto originale:
inplace
- Ordina in direzione riga:
axis
- Crescente o discendente:
- Ordina per indice/colonne (nomi di riga/colonna):
sort_index()
- Ordina per indice (nome riga)
- Crescente o discendente:
ascending
- Cambia oggetto originale:
inplace
- Ordina per colonne (nome colonna):
axis
I seguenti dati sono usati come esempio.
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
L’esempio utilizza pandas.DataFrame, ma pandas.Series fornisce anche reset_index(). L’uso è lo stesso.
Ordina per elemento (dati):sort_values()
Per ordinare in base al valore dell’elemento, utilizzare il metodo sort_values().
Specificare l’etichetta della colonna (nome colonna) in base alla quale ordinare il primo argomento.
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
Utilizzare reset_index() per riassegnare l’indice.
Crescente o discendente:ascending
L’impostazione predefinita è ordinare in ordine crescente. Se hai bisogno di un ordine decrescente, imposta l’argomento ascendente su 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
Ordina per più colonne
Se specifichi il primo argomento in base a un elenco, puoi ordinare per più colonne.
Ordina dal fondo dell’elenco in ordine. Infine, ordina in base alla prima colonna specificata nell’elenco.
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
Se l’argomento ascendente è specificato in un elenco, è possibile selezionare l’ordine crescente/decrescente per ciascuna colonna.
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
Maniglia NaN:na_position
Se manca un valore NaN, per un valore predefinito, viene elencato alla fine.
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
Se l’argomento na_position=’first’, è elencato in contralto.
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
Vedere gli articoli seguenti su come rimuovere e sostituire i valori mancanti.
Cambia oggetto originale:inplace
Per impostazione predefinita, vengono restituiti nuovi oggetti ordinati, ma se l’argomento inplace è impostato su True, l’oggetto originale stesso viene modificato.
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
Ordina in direzione riga:axis
Come negli esempi precedenti, per la funzione predefinita, l’ordinamento viene eseguito nella direzione della colonna (direzione verticale).
Se si desidera eseguire l’ordinamento nella direzione della riga, impostare l’asse degli argomenti su 1. È possibile utilizzare altri argomenti allo stesso modo degli esempi precedenti.
Poiché si verifica un errore quando un numero e una stringa vengono mischiati, in questo esempio le colonne stringa vengono eliminate in modo che le colonne utilizzate utilizzate solo colonne numeriche. Vedere il seguente articolo per il metodo 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
Ordina per indice/colonne (nomi di riga/colonna):sort_index()
Per ordinare per indice/colonne (nomi di riga/colonna), utilizzare il metodo sort_index().
Ordina per indice (nome riga)
Per impostazione predefinita, sort_index() ordina nella direzione della colonna (direzione verticale) in base al nome della riga (etichetta).
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
Crescente o discendente:ascending
Come con sort_values(), l’impostazione predefinita è ordinare in ordine crescente. Se hai bisogno di un ordine decrescente, imposta l’argomento ascendente su 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
Cambia oggetto originale:inplace
Come con sort_values(), puoi usare l’argomento inplace. Impostandolo su True cambia l’oggetto originale.
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
Ordina per colonne (nome colonna):axis
Impostando asse=1, viene ordinato nella direzione della riga (direzione orizzontale) in base alle colonne (nome colonna). Altri argomenti possono essere utilizzati come negli esempi precedenti.
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