python dataframe panda rilasciano la colonna usando int


Risposte:


168

Puoi eliminare la colonna isull'indice in questo modo:

df.drop(df.columns[i], axis=1)

Potrebbe funzionare in modo strano, se hai nomi duplicati nelle colonne, quindi per fare ciò puoi rinominare la colonna che desideri eliminare la colonna con un nuovo nome. Oppure puoi riassegnare DataFrame in questo modo:

df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]

4
Penso che ti sia sfuggito il punto: vogliono scendere per indice, non per etichetta. La conversione dell'indice in un'etichetta sta semplicemente diminuendo per etichetta :(
Darren,

Come indicizzare i cols, se devo eliminare 100 colonne che sono continue nel mezzo del frame di dati
Sai Kiran,

113

Rilascia più colonne in questo modo:

cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)

inplace=Trueviene utilizzato per apportare le modifiche nel frame di dati stesso senza fare cadere la colonna su una copia del frame di dati. Se è necessario mantenere intatto l'originale, utilizzare:

df_after_dropping = df.drop(df.columns[cols],axis=1)

3
A cosa serve l'argomento sul posto?
Sidpat,

12
se non lo usi, inplace=Truedovrai farlo df = df.drop()se vuoi vedere il cambiamento in dfsé.
muon

Come indicizzare i col, se devo eliminare 100 colonne che sono continue nel mezzo del frame di dati.
Sai Kiran,

36

Se ci sono più colonne con nomi identici, le soluzioni fornite finora rimuoveranno tutte le colonne, il che potrebbe non essere quello che stai cercando. Questo può essere il caso se si sta tentando di rimuovere colonne duplicate tranne un'istanza. L'esempio seguente chiarisce questa situazione:

# make a df with duplicate columns 'x'
df = pd.DataFrame({'x': range(5) , 'x':range(5), 'y':range(6, 11)}, columns = ['x', 'x', 'y']) 


df
Out[495]: 
   x  x   y
0  0  0   6
1  1  1   7
2  2  2   8
3  3  3   9
4  4  4  10

# attempting to drop the first column according to the solution offered so far     
df.drop(df.columns[0], axis = 1) 
   y
0  6
1  7
2  8
3  9
4  10

Come puoi vedere, entrambe le colonne X sono state eliminate. Soluzione alternativa:

column_numbers = [x for x in range(df.shape[1])]  # list of columns' integer indices

column_numbers .remove(0) #removing column integer index 0
df.iloc[:, column_numbers] #return all columns except the 0th column

   x  y
0  0  6
1  1  7
2  2  8
3  3  9
4  4  10

Come puoi vedere, questo ha rimosso veramente solo la 0a colonna (prima "x").


1
Sei il mio eroe. Stavo cercando di pensare a un modo intelligente per farlo per troppo tempo.
ATK7474,

5

È necessario identificare le colonne in base alla loro posizione nel frame di dati. Ad esempio, se si desidera eliminare (del) i numeri di colonna 2,3 e 5, sarà,

df.drop(df.columns[[2,3,5]], axis = 1)

4

Se hai due colonne con lo stesso nome. Un modo semplice è rinominare manualmente le colonne in questo modo: -

df.columns = ['column1', 'column2', 'column3']

Quindi puoi rilasciare tramite l'indice di colonna come richiesto, in questo modo: -

df.drop(df.columns[1], axis=1, inplace=True)

df.column[1] lascerà cadere l'indice 1.

Ricorda asse 1 = colonne e asse 0 = righe.


3

se vuoi davvero farlo con numeri interi (ma perché?), allora potresti costruire un dizionario.

col_dict = {x: col for x, col in enumerate(df.columns)}

quindi df = df.drop(col_dict[0], 1)funzionerà come desiderato

modifica: puoi metterlo in una funzione che lo fa per te, anche se in questo modo crea il dizionario ogni volta che lo chiami

def drop_col_n(df, col_n_to_drop):
    col_dict = {x: col for x, col in enumerate(df.columns)}
    return df.drop(col_dict[col_n_to_drop], 1)

df = drop_col_n(df, 2)

1

È possibile utilizzare la seguente riga per eliminare le prime due colonne (o qualsiasi colonna non necessaria):

df.drop([df.columns[0], df.columns[1]], axis=1)

Riferimento


-1

Dal momento che possono esserci più colonne con lo stesso nome, dovremmo prima rinominare le colonne. Ecco il codice per la soluzione.

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.