Filtra le righe del dataframe in base ai valori delle colonne in Pandas

Suraj Joshi 30 gennaio 2023
  1. Seleziona le righe di Pandas in base al valore della colonna specifico
  2. Seleziona le righe di Pandas che non contengono un valore di colonna specifico
  3. Seleziona le righe Pandas con valori di colonna maggiori o minori di un valore specifico
  4. Seleziona le righe Pandas in base a più valori di colonna
  5. Seleziona Righe DataFrame con più condizioni
Filtra le righe del dataframe in base ai valori delle colonne in Pandas

Possiamo selezionare righe di DataFrame in base a valori di una o più colonne. Possiamo anche ottenere righe da DataFrame che soddisfano o non soddisfano una o più condizioni. Questo può essere ottenuto usando il metodo indicizzazione booleana, indicizzazione posizionale, indicizzazione etichetta e metodo query().

Seleziona le righe di Pandas in base al valore della colonna specifico

Possiamo selezionare righe pandas da un DataFrame che contiene o non contiene il valore specifico per una colonna. È ampiamente utilizzato per filtrare il DataFrame in base al valore della colonna.

Seleziona le righe Pandas che contengono un valore di colonna specifico

Filtro utilizzando l’indicizzazione booleana

Nell’indicizzazione booleana, inizialmente generiamo una maschera che è solo una serie di valori booleani che rappresentano se la colonna contiene l’elemento specifico o meno.

df_mask = df["col_name"] == "specific_value"

Applichiamo quindi questa maschera al nostro DataFrame originale per filtrare i valori richiesti.

filtered_df = df[df_mask]

Ciò restituisce il DataFrame filtrato contenente solo le righe che hanno il specific_value per la colonna col_name.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
filtered_df = df[df_mask]
print(filtered_df)

Produzione:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Questo dà tutte le righe in df i cui valori di Sales sono 300.

Filtra utilizzando l’indicizzazione di posizione

È simile all’indicizzazione booleana ma prevede un passaggio aggiuntivo. In questo metodo, creiamo prima una maschera booleana e poi troviamo le posizioni in cui la maschera booleana ha il valore True. Quindi usiamo passa tutte le posizioni con il valore True nella maschera al metodo iloc() in modo che tutte le righe desiderate siano solo selezionate.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
positions = np.flatnonzero(df_mask)
filtered_df = df.iloc[positions]
print(filtered_df)

Produzione:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Questo fornisce anche tutte le righe in df i cui valori di Vendite sono 300.

Pandas Chaining

Possiamo anche usare Pandas Chaining per filtrare il filtro dataframe dei pandas in base al valore della colonna. In questo metodo, usiamo il metodo pandas.DataFrame.eq() per la colonna DataFrame i cui valori devono essere controllati per confrontare l’uguaglianza degli elementi in DataFrame.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df[df.Sales.eq(300)]
print(filtered_df)

Produzione:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

pandas.DataFrame.query()

Potremmo usare pandas.DataFrame.query() per selezionare le righe in base al valore della colonna in Pandas.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df.query("Sales == 300")
print(filtered_df)

Produzione:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Se desideriamo aggiornare il DataFrame esistente, possiamo impostare inplace=True nel metodo di query.

Seleziona le righe di Pandas che non contengono un valore di colonna specifico

Il metodo per selezionare le righe di Pandas che non contengono un valore di colonna specifico è simile a quello della selezione di righe di Pandas con un valore di colonna specifico. L’unica cosa che dobbiamo cambiare è la condizione che la colonna non contenga un valore specifico sostituendo semplicemente == con == Durante la creazione di maschere o query.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] != 300
filtered_df = df[df_mask]
print(filtered_df)

Produzione:

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Questo seleziona tutte le righe di df i cui valori di Sales non sono 300.

Seleziona le righe Pandas con valori di colonna maggiori o minori di un valore specifico

Per selezionare le righe Pandas con valori di colonna maggiori o minori del valore specifico, utilizziamo operatori come >, <=, > durante la creazione di maschere o query.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] >= 300
filtered_df = df[df_mask]
print(filtered_df)

Produzione:

       Date  Sales  Price
1  April-11    300      1
2  April-12    400      2
4  April-14    300      3
5  April-16    300      2

Ciò si traduce in DataFrame con valori di Sales maggiori o uguali a 300.

Seleziona le righe Pandas in base a più valori di colonna

Abbiamo introdotto metodi per selezionare le righe in base a valori specifici della colonna in DataFrame. In questa sezione, discuteremo i metodi per selezionare le righe di Pandas in base a più valori di colonna.

Seleziona le righe Pandas che contengono uno qualsiasi dei valori di più colonne

Per selezionare le righe Pandas che contengono uno qualsiasi dei valori di più colonne, usiamo pandas.DataFrame.isin(values) che restituisce DataFrame di booleani che mostra se ogni elemento nel DataFrame è contenuto in valori o meno. Il DataFrame dei booleani così ottenuti può essere utilizzato per selezionare le righe.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[df.Sales.isin(values)]
print(filtered_df)

Produzione:

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Filtra tutte le righe da DataFrame il cui valore Sales è 200 o 400.

Seleziona le righe Pandas che non contengono nessuno dei valori di colonna specificati più

Per selezionare le righe di un DataFrame che non contiene nessuno dei più valori di colonna specificati, negheremo il DataFrame dei valori booleani restituiti da pandas.DataFrame.isin(values) inserendo il segno ~ in primo piano.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[~df.Sales.isin(values)]
print(filtered_df)

Produzione:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Filtra tutte le righe da DataFrame il cui valore Sales non è né 200400.

Seleziona Righe DataFrame con più condizioni

Se vogliamo filtrare le righe considerando i valori di riga di più colonne, creiamo più condizioni e le combiniamo con gli operatori &. Ora, la riga viene selezionata solo quando soddisfa le condizioni per tutte le colonne.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values_1 = [200, 400]
values_2 = [2, 3]
filtered_df = df[df.Sales.isin(values_1) & ~df.Price.isin(values_2)]
print(filtered_df)

Produzione:

       Date  Sales  Price
3  April-13    200      4

Filtra tutte le righe da DataFrame il cui valore Sales è 200 o 400 e il valore Price non è né 2 né 3. La riga nell’output soddisfa solo entrambe le condizioni nell’intero DataFrame.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Articolo correlato - Pandas DataFrame

Articolo correlato - Pandas DataFrame Row