columna de caída de pandas del marco de datos de Python usando int


Respuestas:


167

Puede eliminar la columna en el iíndice de esta manera:

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

Podría funcionar de forma extraña, si tiene nombres duplicados en las columnas, por lo que para hacer esto puede cambiar el nombre de la columna que desea eliminar por nuevo nombre. O puede reasignar DataFrame de esta manera:

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

44
Creo que te perdiste el punto: quieren caer por índice, no por etiqueta. La conversión del índice en una etiqueta simplemente se cae por etiqueta :(
Darren

Cómo indexar cols, si tengo que soltar 100 columnas que son continuas en el medio del marco de datos
Sai Kiran

112

Suelte varias columnas como esta:

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

inplace=Truese usa para realizar los cambios en el marco de datos en sí mismo sin que la columna caiga en una copia del marco de datos. Si necesita mantener su original intacto, use:

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

3
¿Para qué sirve el argumento in situ?
sidpat

12
si no lo usa inplace=True, tendrá que hacerlo df = df.drop()si desea ver el cambio en dfsí mismo.
muon

Cómo indexar cols, si tengo que soltar 100 columnas que son continuas en el medio del marco de datos.
Sai Kiran

36

Si hay varias columnas con nombres idénticos, las soluciones dadas aquí hasta ahora eliminarán todas las columnas, que pueden no ser lo que uno está buscando. Este puede ser el caso si uno está tratando de eliminar columnas duplicadas, excepto una instancia. El siguiente ejemplo aclara esta situación:

# 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

Como puede ver, ambas columnas X fueron descartadas. Solución 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

Como puede ver, esto realmente eliminó solo la columna 0 (primera 'x').


1
Eres mi heroe. Estaba tratando de pensar en una forma inteligente de hacer esto durante demasiado tiempo.
ATK7474

5

Debe identificar las columnas según su posición en el marco de datos. Por ejemplo, si desea soltar (del) columna número 2,3 y 5, será,

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

4

Si tiene dos columnas con el mismo nombre. Una forma simple es cambiar manualmente el nombre de las columnas de esta manera: -

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

Luego puede soltar a través del índice de columna como lo solicitó, de esta manera: -

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

df.column[1] caerá el índice 1.

Recuerde eje 1 = columnas y eje 0 = filas.


3

si realmente quieres hacerlo con enteros (pero ¿por qué?), entonces podrías construir un diccionario.

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

entonces df = df.drop(col_dict[0], 1)funcionará como se desee

editar: puede ponerlo en una función que lo haga por usted, aunque de esta manera crea el diccionario cada vez que lo llama

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

Puede usar la siguiente línea para soltar las dos primeras columnas (o cualquier columna que no necesite):

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

Referencia


-1

Como puede haber varias columnas con el mismo nombre, primero debemos cambiar el nombre de las columnas. Aquí hay un código para la solución.

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.