Entendo que, para soltar uma coluna, você usa df.drop ('nome da coluna', eixo = 1). Existe uma maneira de eliminar uma coluna usando um índice numérico em vez do nome da coluna?
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]]
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:
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
000611172228333944410# attempting to drop the first column according to the solution offered so far
df.drop(df.columns[0], axis =1)
y
06172839410
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
0061172283394410
Como você pode ver, isso realmente removeu apenas a coluna 0 (primeiro 'x').
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á,
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)
Respostas:
Você pode excluir a coluna no
i
índice assim: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:
fonte
Solte várias colunas assim:
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:fonte
inplace=True
, precisará fazê-df = df.drop()
lo se quiser ver a mudança emdf
si.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:
Como você pode ver, as duas colunas Xs foram descartadas. Solução alternativa:
Como você pode ver, isso realmente removeu apenas a coluna 0 (primeiro 'x').
fonte
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á,
fonte
Se você tiver duas colunas com o mesmo nome. Uma maneira simples é renomear manualmente as colunas assim:
Em seguida, você pode soltar pelo índice da coluna conforme solicitado, assim: -
df.column[1]
vai largar o índice 1.Lembre-se do eixo 1 = colunas e do eixo 0 = linhas.
fonte
se você realmente quiser fazer isso com números inteiros (mas por quê?), poderá criar um dicionário.
então
df = df.drop(col_dict[0], 1)
funcionará como desejadoedit: 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
fonte
Você pode usar a seguinte linha para eliminar as duas primeiras colunas (ou qualquer coluna que você não precisa):
Referência
fonte
Como pode haver várias colunas com o mesmo nome, devemos renomear as colunas. Aqui está o código para a solução.
fonte