Ordinare dati con pandas

Il primo passo di ogni analisi di dati consiste nell’esplorazione. Molto spesso, per capirci qualcosa bisogna andare a mettere ordine nel nostro set di dati. Fortunatamente la libreria pandas ci permette di ordinare il nostro dataset in pochi e semplici passaggi, senza dover rinunciare alla complessità richiesta dalle analisi più approfondite.

A titolo di esempio, andremo ad usare un set di dati relativo all’insieme delle strutture ricettive della regione Sicilia, che si può scaricare liberamente su datiopen.it. Il dataset ha 6397 righe organizzate in 15 colonne:

Immagine 1

Ordinare i dati (sort_values)

Pandas dipone di un comando immediato per ordinare i valori: sortvalues. Per utilizzarlo, serve semplicemente specificare la colonna del nostro dataframe a cui si vuole applicarlo. Una peculiarità degna di nota è che il comando “sort_values” crea di default un altro dataframe, copia dell’originale. Per far sì che invece sia applicato al dataframe originale, bisogna utilizzare l’argomento “inplace”. Vediamo subito come ordinare il nostro dataframe, ribattezzato “df” per esigenze di sintesi:

df.sort_values(by=['Categoria'], inplace = True)

In questo esempio abbiamo ordinato il dataframe secondo i valori della colonna “Categoria”. A questo punto probabilmente mi chiederai: in che modo li abbiamo ordinati? Il comando “sort_values” è di default ascendente. Andiamo a vedere nello specifico l’argomento corrispondete:

# ordinare i valori in maniera ASCENDENTE
df.sort_values(by=['Categoria'], inplace = True)
df.sort_values(by=['Categoria'], ascending = True, inplace = True)
df.sort_values(by=['Categoria'], ascending = 1, inplace = True)

# ordinare i valori in maniera DISCENDENTE
df.sort_values(by=['Categoria'], ascending = False, inplace = True)
df.sort_values(by=['Categoria'], ascending = 0, inplace = True)

In effetti, abbiamo tre possibilità per istituire un ordine ascendente e due per ordinare i valori in maniera decrescente.

Ricapitolando: se non chiamato, l’argomento “ascending” è vero. Se lo si specifica, True/1 sono usati per confermarlo, False/0 per contraddirlo, istituendo così un ordine discendente. Da notare come i valori binari di Vero e Falso (1 e 0) possano essere impiegati. Personalmente, per la loro brevità, li preferisco.

Ordinare i valori di due o più colonne

A volte, come ti sarà capitato di fare in Excel, vorrai ordinare il set di dati secondo i valori di diverse colonne. Pandas ci permette di farlo in maniera molto semplice:

# ordinare i valori in maniera ASCENDENTE
df.sort_values(by=['Categoria','Sigla provincia', 'Nome'], inplace = True)
df.sort_values(by=['Categoria','Sigla provincia', 'Nome'], ascending = True, inplace = True)
df.sort_values(by=['Categoria','Sigla provincia', 'Nome'], ascending = 1, inplace = True)

# ordinare i valori in maniera DISCENDENTE
df.sort_values(by=['Categoria','Sigla provincia', 'Nome'], ascending = False, inplace = True)
df.sort_values(by=['Categoria','Sigla provincia', 'Nome'], ascending = 0, inplace = True)

In questi esempi abbiamo ordinato in maniera ascendente o discendente i valori delle colonne “Categoria”, “Sigla provincia” e “Nome”. Ovviamente, i valori sono ordinati inizialmente a seconda della prima colonna nella lista, poi secondo la seconda, la terza, ecc.

Tuttavia, abbiamo applicato un certo tipo di ordine a tutte le colonne coinvolte. Come facciamo ad ordinare il nostro set di dati prima in maniera decrescente secondo la colonna “Categoria” (così da avere in cima le strutture ricettive con numero maggiore di stelle), poi in modo crescente per la “Sigla provincia” e infine in modo crescente per la colonna “Nome”?

Ordinare i valori di più colonne in direzioni diverse

Per ordinare i valori del nostro dataframe in maniera diversa a seconda della colonna presa in considerazione, non ci resta che attribuire il valore che desideriamo dell’argomento “ascending” (True o False) a ciascuna delle colonne specificate:

df.sort_values(by=['Categoria','Sigla provincia', 'Nome'], ascending = [0,1,1], inplace = True)

In effetti, con questa semplice riga, abbiamo prima di tutto ordinato in maniera discendente i valori della colonna “Categoria”, poi in modo ascendente la colonna “Sigla provincia” e infine abbiamo applicato un ordine ascendente alla colonna “Nome”. Il nostro dataframe così ordinato avrà questo aspetto:

Immagine 2

Immagine 2

Infatti, le prime strutture ricettive che vediamo fanno parte della categoria “5 Stelle Lusso” (primo livello di ordine, tipo decrescente”), la colonna “Sigla provincia” contiene valori ordinati in maniera ascendente (secondo livello di ordine) e infine i nomi delle strutture ricettive situate in determinate province, sono a loro volta ordinati in modo ascendente (terzo livello di ordine).