Elimina una riga in base al valore della colonna in Pandas DataFrame

Asad Riaz 30 gennaio 2023
  1. Metodo .drop per eliminare la riga sul valore della colonna in Pandas DataFrame
  2. Metodo boolean masking per eliminare la riga in Pandas DataFrame
Elimina una riga in base al valore della colonna in Pandas DataFrame

Introdurremo metodi per eliminare le righe DataFrame di Pandas in base alle condizioni sui valori delle colonne, utilizzando .drop (con e senza loc) e mascheramento booleano.

Metodo .drop per eliminare la riga sul valore della colonna in Pandas DataFrame

Il metodo .drop accetta un singolo o una lista di nomi di colonne ed elimina le righe o le colonne. Per le righe impostiamo il parametro axis=0 e per la colonna impostiamo axis=1 (di default axis è 0). Possiamo anche ottenere la serie di True e False in base alla condizione applicata al valore della colonna nel DataFrame di Pandas.

Codici di esempio:

# python 3.x
import pandas as pd

fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

# Create a DataFrame object
df = pd.DataFrame(fruit_list, columns=["Name", "Price", "Stock"])
# Get names of indexes for which column Stock has value No
indexNames = df[df["Stock"] == "No"].index
# Delete these row indexes from dataFrame
df.drop(indexNames, inplace=True)
print(df)

Produzione:

     Name  Price Stock
0  Orange     34   Yes
3   Apple     44   Yes
5    Kiwi     84   Yes

Possiamo anche ottenere un risultato simile usando .loc all’interno del metodo df.drop.

df.drop(df.loc[df["Stock"] == "Yes"].index, inplace=True)

Possiamo anche rilasciare le righe in base a più valori di colonna. Nell’esempio precedente, possiamo eliminare le righe con prezzo >= 30 e prezzo <= 70.

Codice di esempio:

# python 3.x
import pandas as pd

# List of Tuples
fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

# Create a DataFrame object
df = pd.DataFrame(fruit_list, columns=["Name", "Price", "Stock"])
indexNames = df[(df["Price"] >= 30) & (df["Price"] <= 70)].index
df.drop(indexNames, inplace=True)
print(df)

Produzione:

     Name  Price Stock
1   Mango     24    No
2  banana     14    No
5    Kiwi     84   Yes

Le righe con prezzo > 30 e meno < 70 sono state eliminate.

Metodo boolean masking per eliminare la riga in Pandas DataFrame

Il boolean masking è il modo migliore e più semplice per eliminare la riga nel DataFrame di Pandas in base al valore della colonna.

Codici di esempio:

# python 3.x
import pandas as pd

# List of Tuples
fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

# Create a DataFrame object
df = pd.DataFrame(fruit_list, columns=["Name", "Price", "Stock"])
print(df[df.Price > 40])
print("............................")
print(df[(df.Price > 40) & (df.Stock == "Yes")])

Produzione:

        Name  Price Stock
3      Apple     44   Yes
4  Pineapple     64    No
5       Kiwi     84   Yes
............................
    Name  Price Stock
3  Apple     44   Yes
5   Kiwi     84   Yes

Articolo correlato - Pandas DataFrame