Filtra le righe del dataframe in base ai valori delle colonne in Pandas
- Seleziona le righe di Pandas in base al valore della colonna specifico
- Seleziona le righe di Pandas che non contengono un valore di colonna specifico
- Seleziona le righe Pandas con valori di colonna maggiori o minori di un valore specifico
- Seleziona le righe Pandas in base a più valori di colonna
- Seleziona Righe DataFrame con più condizioni
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é 200
né 400
.
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.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArticolo correlato - Pandas DataFrame
- Come ottenere le intestazioni delle colonne DataFrame Pandas come lista
- Come cancellare la colonna DataFrame Pandas DataFrame
- Come convertire la colonna DataFrame in data e ora in pandas
- Converti un Float in un Integer in Pandas DataFrame
- Ordina Pandas DataFrame in base ai valori di una colonna
- Ottieni l'aggregato di Pandas Group-By e Sum
Articolo correlato - Pandas DataFrame Row
- Ottieni il conteggio delle righe di un DataFrame Pandas
- Mescola casualmente le righe DataFrame in Pandas
- Scorri le righe di un DataFrame in Pandas
- Ottieni l'indice di tutte le righe la cui colonna specifica soddisfa una determinata condizione in Pandas
- Ottieni l'indice delle righe la cui colonna corrisponde a un valore specifico in Pandas