python dataframe pandas soltar coluna usando int


Respostas:


167

Você pode excluir a coluna no iíndice assim:

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

Pode ser estranho, se você tiver nomes duplicados nas colunas, para fazer isso, você pode renomear a coluna que deseja excluir a coluna pelo novo nome. Ou você pode reatribuir o DataFrame assim:

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

4
Eu acho que você perdeu o ponto - eles querem cair por índice, não por rótulo. A conversão de índice em um rótulo está apenas caindo por rótulo :(
— Darren

Como indexar colunas, se eu tiver que soltar 100 colunas que são contínuas no meio do quadro de dados
— Sai Kiran

111

Solte várias colunas assim:

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

inplace=Trueé usado para fazer as alterações no próprio quadro de dados sem fazer a coluna cair em uma cópia do quadro de dados. Se você precisar manter o original intacto, use:

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

3
Para que serve o argumento local?
— sidpat 8/16

12
se você não usar inplace=True, precisará fazê- df = df.drop()lo se quiser ver a mudança em dfsi.
— muon

Como indexar colunas, se eu tiver que soltar 100 colunas que são contínuas no meio do quadro de dados.
— Sai Kiran

36

Se houver várias colunas com nomes idênticos, as soluções fornecidas até agora removerão todas as colunas, o que pode não ser o que você está procurando. Esse pode ser o caso se alguém estiver tentando remover colunas duplicadas, exceto uma instância. O exemplo abaixo esclarece esta situação:

# 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 você pode ver, as duas colunas Xs foram descartadas. Solução 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 você pode ver, isso realmente removeu apenas a coluna 0 (primeiro 'x').


1
Voce é meu herói. Estava tentando pensar em uma maneira inteligente de fazer isso por muito tempo.
— ATK7474

5

Você precisa identificar as colunas com base em suas posições no quadro de dados. Por exemplo, se você deseja soltar (del) os números de colunas 2,3 e 5, será,

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

4

Se você tiver duas colunas com o mesmo nome. Uma maneira simples é renomear manualmente as colunas assim:

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

Em seguida, você pode soltar pelo índice da coluna conforme solicitado, assim: -

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

df.column[1] vai largar o índice 1.

Lembre-se do eixo 1 = colunas e do eixo 0 = linhas.


3

se você realmente quiser fazer isso com números inteiros (mas por quê?), poderá criar um dicionário.

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

então df = df.drop(col_dict[0], 1)funcionará como desejado

edit: você pode colocá-lo em uma função que faz isso por você, embora desta maneira crie o dicionário toda vez que você o chamar

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

Você pode usar a seguinte linha para eliminar as duas primeiras colunas (ou qualquer coluna que você não precisa):

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

Referência


-1

Como pode haver várias colunas com o mesmo nome, devemos renomear as colunas. Aqui está o código para a solução.

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.