HOWTO · Pandas

Pandas Escludi colonna

Questo tutorial spiega come possiamo ottenere tutte le colonne di un DataFrame tranne una colonna particolare.

In questa pagina

Per escludere colonne da un Pandas DataFrame, usa drop() per rimuovere direttamente le etichette, loc per applicare una condizione ai nomi delle colonne oppure Index.difference() se il suo comportamento di ordinamento è adatto al risultato. Gli esempi usano un’unica tabella di titoli azionari; ogni blocco di codice crea i propri dati, quindi puoi eseguirlo in modo indipendente.

Selezionare tutte le colonne tranne una con loc

Usa loc con una selezione completa delle righe e una condizione booleana sulle etichette delle colonne. La selezione di righe : mantiene tutte le righe; stocks_df.columns != "Sector" è vera per ogni colonna la cui etichetta non è Sector, quindi restano soltanto quelle colonne. loc è un accessore per selezionare righe e colonne, non un metodo da chiamare con le parentesi. Per la sintassi di selezione, consulta la proprietà loc.

Esegui questo esempio. I nomi delle colonne e gli eventuali risultati mostrati nel blocco restano in inglese.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

filtered_df = stocks_df.loc[:, stocks_df.columns != "Sector"]
print(filtered_df)

La tabella risultante contiene le colonne Stock e Price(in $). Questo schema è utile quando l’esclusione si può esprimere naturalmente come regola sulle etichette; modificando il confronto puoi mantenere o rimuovere un’altra colonna con nome specifico.

Escludere una o più colonne con drop()

Per rimuovere direttamente le colonne in base all’etichetta, drop() accetta l’argomento columns. Passa una stringa per una colonna e una lista di stringhe per più colonne. Questa sintassi chiarisce che le etichette si riferiscono alle colonne; la forma equivalente che specifica l’asse è drop(labels, axis=1). Per impostazione predefinita, drop() restituisce un nuovo DataFrame e lascia invariato stocks_df, quindi assegna il risultato a una variabile se vuoi riutilizzarlo in seguito. I nomi delle colonne e gli eventuali risultati mostrati nel blocco restano in inglese.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

without_sector = stocks_df.drop(columns="Sector")
without_sector_and_price = stocks_df.drop(columns=["Sector", "Price(in $)"])
print(without_sector)
print(without_sector_and_price)

Il primo risultato mantiene Stock e Price(in $); il secondo mantiene soltanto Stock. Entrambe le operazioni partono dalla tabella originale, perché per impostazione predefinita nessuna delle due chiamate la modifica. Usa la forma con la lista quando vuoi rimuovere più etichette in un’unica operazione.

Escludere colonne con Index.difference()

Index.difference() sottrae le etichette da escludere dall’Index delle etichette delle colonne. Usa l’Index risultante per selezionare le colonne. Per impostazione predefinita, difference() ordina le etichette restituite; di conseguenza, la tabella può avere un ordine di colonne diverso da quello originale, anche se i dati delle colonne mantenute non cambiano. I nomi delle colonne e gli eventuali risultati mostrati nel blocco restano in inglese.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

remaining_columns = stocks_df.columns.difference(["Sector"])
filtered_df = stocks_df[remaining_columns]
print(filtered_df)

In questo esempio le etichette rimanenti sono in ordine alfabetico: Price(in $) compare quindi prima di Stock, diversamente dal loro ordine nel DataFrame originale. Se è importante mantenere l’ordine di origine, preferisci drop() oppure la condizione con loc illustrata sopra, invece di affidarti all’ordinamento predefinito di difference.

Scegliere un approccio per escludere colonne

Scegli drop() quando conosci le etichette da rimuovere e vuoi esprimere l’operazione nel modo più diretto; usa l’argomento columns sia per una singola etichetta sia per una lista. Scegli loc quando la regola per mantenere o rimuovere le colonne dipende dai loro nomi, perché la maschera booleana rende visibile la logica della selezione. Scegli Index.difference() quando è utile una sottrazione simile a quella tra insiemi e l’ordinamento predefinito delle etichette è accettabile.

Tutti e tre gli approcci selezionano colonne dallo stesso DataFrame, ma applicano regole diverse: etichette esplicite con drop(), una condizione booleana con loc e sottrazione tra Index con Index.difference(). Controlla l’ordine risultante delle colonne se il codice successivo dipende dalle loro posizioni. Per la normale rimozione di colonne indicate per nome, drop(columns=...) è in genere il punto di partenza più chiaro.