
Usa drop() per eliminare righe e colonne da pandas.DataFrame.
Prima della versione 0.21.0, specifica la riga/colonna con le etichette dei parametri e l’asse. indice o colonne possono essere utilizzati da 0.21.0.
Questo articolo ha descritto i seguenti contenuti.
- Elimina le righe da pandas.DataFrame
- Specificare per nome riga (etichetta riga)
- Specificare per numero di riga
- Nota quando l’indice non è impostato
- Elimina colonne da panda.DataFrame
- Specifica per nome colonna (etichetta colonna)
- Specificare per numero di colonna
- Elimina più righe e colonne contemporaneamente
Vedere i seguenti articoli sulla rimozione dei valori mancanti NaN e delle righe con elementi duplicati.
Il codice di esempio utilizza i dati seguenti.
import pandas as pd
df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Charlie 18 CA 70
# Dave 68 TX 70
# Ellen 24 CA 88
# Frank 30 NY 57
Il file CSV è qui:
Elimina le righe da pandas.DataFrame
Specificare per nome riga (etichetta riga)
Specificando con le prime etichette dei parametri e il secondo asse dei parametri. Nel caso di righe, impostare asse=0.
print(df.drop('Charlie', axis=0))
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Dave 68 TX 70
# Ellen 24 CA 88
# Frank 30 NY 57
Il valore predefinito è asse=0, quindi l’asse può essere omesso.
print(df.drop('Charlie'))
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Dave 68 TX 70
# Ellen 24 CA 88
# Frank 30 NY 57
Dalla versione 0.21.0 è possibile utilizzare anche l’indice dei parametri.
print(df.drop(index='Charlie'))
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Dave 68 TX 70
# Ellen 24 CA 88
# Frank 30 NY 57
Utilizzare un elenco per eliminare più righe contemporaneamente.
print(df.drop(['Bob', 'Dave', 'Frank']))
# age state point
# name
# Alice 24 NY 64
# Charlie 18 CA 70
# Ellen 24 CA 88
print(df.drop(index=['Bob', 'Dave', 'Frank']))
# age state point
# name
# Alice 24 NY 64
# Charlie 18 CA 70
# Ellen 24 CA 88
Per configurazione predefinita, il DataFrame originale non viene modificato e viene restituito un nuovo DataFrame.
L’impostazione del parametro inplace su True cambia il DataFrame originale. In questo caso, non viene restituito alcun nuovo DataFrame e il valore restituito è None.
df_org = df.copy()
df_org.drop(index=['Bob', 'Dave', 'Frank'], inplace=True)
print(df_org)
# age state point
# name
# Alice 24 NY 64
# Charlie 18 CA 70
# Ellen 24 CA 88
Specificare per numero di riga
Se si desidera specificare in base al numero di riga, utilizzare l’attributo index di DataFrame.
Specificare il numero di riga in [] dell’attributo index per ottenere il nome della riga corrispondente. È possibile specificare più numeri di riga utilizzando un elenco.
print(df.index[[1, 3, 5]])
# Index(['Bob', 'Dave', 'Frank'], dtype="object", name="name")
Puoi specificare questo come il primo parametro label o index of drop().
print(df.drop(df.index[[1, 3, 5]]))
# age state point
# name
# Alice 24 NY 64
# Charlie 18 CA 70
# Ellen 24 CA 88
print(df.drop(index=df.index[[1, 3, 5]]))
# age state point
# name
# Alice 24 NY 64
# Charlie 18 CA 70
# Ellen 24 CA 88
Nota quando l’indice non è impostato
Se non viene impostato alcun nome di riga, per la configurazione predefinita index sarà una sequenza di numeri interi. Fai attenzione se index è un numero anziché una stringa.
df_noindex = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df_noindex)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
print(df_noindex.index)
# RangeIndex(start=0, stop=6, step=1)
Finché si tratta di un numero sequenziale, il risultato è lo stesso sia che si specifichi un numero così com’è sia che si utilizzi l’attributo index.
print(df_noindex.drop([1, 3, 5]))
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
print(df_noindex.drop(df_noindex.index[[1, 3, 5]]))
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
Il risultato è diverso se è fuori sequenza per ordinamento, ecc. Quando si specifica un valore numerico così com’è, la riga la cui etichetta è il valore numerico viene eliminato e quando si utilizza l’attributo indice, la riga il cui numero è il valore numerico viene cancellato.
df_noindex_sort = df_noindex.sort_values('state')
print(df_noindex_sort)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
print(df_noindex_sort.index)
# Int64Index([1, 2, 4, 0, 5, 3], dtype="int64")
print(df_noindex_sort.drop([1, 3, 5]))
# name age state point
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
print(df_noindex_sort.drop(df_noindex_sort.index[[1, 3, 5]]))
# name age state point
# 1 Bob 42 CA 92
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Vedere il seguente articolo per l’ordinamento.
Elimina colonne da panda.DataFrame
Specifica per nome colonna (etichetta colonna)
Specificando con le prime etichette dei parametri e il secondo asse dei parametri. Nel caso di righe, impostare asse=1.
print(df.drop('state', axis=1))
# age point
# name
# Alice 24 64
# Bob 42 92
# Charlie 18 70
# Dave 68 70
# Ellen 24 88
# Frank 30 57
A partire dalla versione 0.21.0, puoi anche utilizzare le colonne dei parametri.
print(df.drop(columns='state'))
# age point
# name
# Alice 24 64
# Bob 42 92
# Charlie 18 70
# Dave 68 70
# Ellen 24 88
# Frank 30 57
Utilizzare un elenco per eliminare più colonne contemporaneamente.
print(df.drop(['state', 'point'], axis=1))
# age
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
print(df.drop(columns=['state', 'point']))
# age
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
Il parametro inplace può essere utilizzato anche per le righe.
df_org = df.copy()
df_org.drop(columns=['state', 'point'], inplace=True)
print(df_org)
# age
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
Specificare per numero di colonna
Se si desidera specificare in base al numero di colonna, utilizzare l’attributo colonne di DataFrame.
print(df.columns[[1, 2]])
# Index(['state', 'point'], dtype="object")
print(df.drop(df.columns[[1, 2]], axis=1))
# age
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
print(df.drop(columns=df.columns[[1, 2]]))
# age
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
Se il valore delle colonne è un numero intero, fare attenzione come sopra le righe.
Elimina più righe e colonne contemporaneamente
Dalla versione 0.21.0 e successive, è possibile eliminare più righe e colonne contemporaneamente specificando l’indice dei parametri e le colonne.
Naturalmente, è anche possibile specificare per numero di riga e numero di colonna o specificare il parametro inplace.
print(df.drop(index=['Bob', 'Dave', 'Frank'],
columns=['state', 'point']))
# age
# name
# Alice 24
# Charlie 18
# Ellen 24
print(df.drop(index=df.index[[1, 3, 5]],
columns=df.columns[[1, 2]]))
# age
# name
# Alice 24
# Charlie 18
# Ellen 24
df_org = df.copy()
df_org.drop(index=['Bob', 'Dave', 'Frank'],
columns=['state', 'point'], inplace=True)
print(df_org)
# age
# name
# Alice 24
# Charlie 18
# Ellen 24
