- analiticas
- Posts
- Filtrare un set di dati con il metodo query()
Filtrare un set di dati con il metodo query()
Aspetta... è Python o SQL?
Filtrare i dati è un’operazione molto comune quando ci si appresta ad analizzarli. In questa micro-lezione vedremo come farlo usando il metodo query()
.
Python o SQL?
Se hai una qualche familiarità con SQL, molto probabilmente il metodo query()
ti piacerà. Infatti, ci permette di selezionare i dati che corrispondono a determinati criteri con una sintassi simile a quella di SQL.
Vediamo insieme alcuni esempi.
Selezionare stringhe di testo uguali a …
Immagina di voler selezionare tutte le righe di un dataframe che contengono “Roma” in una determinata colonna. Ecco come fare con il metodo query()
:
df.query("colonna1 == 'Roma'")
Ci sono due cose importanti a cui prestare attenzione:
Le virgolette: le virgolette del metodo
query()
e quelle che indicano il valore che vogliamo usare per filtrare il nostro dataframe devono essere di tipo diverso.Il simbolo dell’uguale: ricorda che in Python il doppio uguale (==) indica uguaglianza. Il simbolo dell’uguale semplice (=) è invece utilizzato per assegnare un valore a qualcosa.
Selezionare i valori di una lista
In questo esempio, immaginiamo di voler selezionare le righe di un dataframe solo se i valori di una colonna sono tra quelli di una lista.
Se vogliamo esplicitare la lista direttamente all’interno del motodo query()
, possiamo fare così:
df.query("colonna1 in ('Roma', 'Milano', 'Napoli', Venezia'")
Se invece, magari per evitare ripetizioni, preferiamo fare riferimento ad una lista citata in precedenza, possiamo fare così:
lista = ('Roma', 'Milano', 'Napoli', 'Venezia')
df.query("colonna1 in @lista")
Infatti, in questo caso stiamo utilizzando l’operatore “@” che fa riferimento ad una variabile (nel nostro caso, la lista).
Importante: Il metodo query()
esige che “in” sia scritto in minuscolo.
Selezionare i valori non inclusi in una lista
In maniera simile all’esempio precedente, immaginiamo di voler escludere dalla nostra selezione i valori di una lista.
Anche in questo caso, possiamo esplicitare la lista nel metodo query()
:
df.query("colonna1 not in ('Roma', 'Milano', 'Napoli', Venezia'")
Oppure, possiamo fare riferimento ad una lista già introdotta in precedenza:
lista = ('Roma', 'Milano', 'Napoli', 'Venezia')
df.query("colonna1 not in @lista")
Importante: Il metodo query()
esige che “not in” sia scritto in minuscolo.
Selezionare valori numerici
Il metodo query()
funziona anche con colonne che contengono valori numerici. Ecco alcuni esempi:
# selezionare le righe della colonna2 con valori uguali a 0
df.query("colonna2 == 0")
# selezionare le righe della colonna2 con valori maggiori di 5
df.query("colonna2 > 5")
# selezionare le righe della colonna2 con valori minori o uguali a 100
df.query("colonna2 <= 100")
Combinare più criteri
Il metodo query()
ci permette di combinare diversi filtri per selezionare i nostri dati. Per farlo, bisogna separarli con le congiunzioni “and” (in italiano: e) e “or” (in italiano: o), proprio come avviene in SQL.
Vediamo qualche esempio:
lista = ('Roma', 'Milano', 'Napoli', 'Venezia')
df.query("colonna1 not in @lista and colonna2 > 0")
In questo caso per esempio, andremo a selezionare solo le righe in cui il valore della colonna1 non è incluso nella lista e quello della colonna2 è maggiore di 0.
Vediamo un esempio più complesso in cui useremo sia “and” che “or”:
lista = ('Roma', 'Milano', 'Napoli', 'Venezia')
df.query("colonna1 in @lista and (colonna2 < 75 or colonna3 == 'Mario')")
In questo caso, è importantissimo l’ordine delle parentesi per stabilire le relazioni fra le congiunzioni “and” e “or”.
Importante: Il metodo query()
esige che “and” e “or” siano scritti in minuscolo.
Conclusione
Il metodo query()
, grazie alla sua semplicità ed eleganza, è la scelta perfetta per filtrare i nostri dati: non è soltanto efficace, ma si dimostra facilmente leggibile.
Se condividi le tue analisi con amici e/o colleghi, usarlo sarà una scelta che risulterà gradita.
Alla prossima micro-lezione 👋