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?
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?
Respostas:
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]]
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)
inplace=True
, precisará fazê- df = df.drop()
lo se quiser ver a mudança em df
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:
# 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').
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)
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.
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)
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)