web-dev-qa-db-fra.com

pandas de python dataframe drop colonne en utilisant int

Je comprends que pour supprimer une colonne, vous utilisez df.drop ('nom de colonne', axis = 1). Est-il possible de supprimer une colonne en utilisant un index numérique au lieu du nom de la colonne?

88
user1802143

Vous pouvez supprimer une colonne sur i index comme ceci:

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

Cela pourrait être étrange si vous avez des noms en double dans les colonnes. Pour ce faire, vous pouvez renommer la colonne que vous souhaitez supprimer par un nouveau nom. Ou vous pouvez réaffecter DataFrame comme ceci:

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

Déposez plusieurs colonnes comme ceci:

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

S'il existe plusieurs colonnes portant des noms identiques, les solutions données jusqu'ici supprimeront toutes les colonnes, ce qui peut ne pas correspondre à ce que l'on recherche. Cela peut être le cas si l’on essaie de supprimer les colonnes en double, sauf une instance. L'exemple ci-dessous clarifie cette situation:

# 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

Comme vous pouvez le constater, les deux colonnes X ont été supprimées . Solution alternative:

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

Comme vous pouvez le constater, cela ne supprime réellement que la 0ème colonne (le premier 'x').

15
Saeed

si vous voulez vraiment le faire avec des entiers (mais pourquoi?), vous pouvez alors construire un dictionnaire.

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

alors df = df.drop(col_dict[0], 1) fonctionnera comme vous le souhaitez

edit: vous pouvez le mettre dans une fonction qui le fait pour vous, mais de cette façon, il crée le dictionnaire chaque fois que vous l'appelez

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)
3
mkln

Vous devez identifier les colonnes en fonction de leur position dans le cadre de données. Par exemple, si vous voulez supprimer (supprimer) les colonnes 2,3 et 5, ce sera:

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

Vous pouvez utiliser la ligne suivante pour supprimer les deux premières colonnes (ou toute colonne dont vous n’avez pas besoin):

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

Référence

0
Mojtaba Peyrovi

Puisqu'il peut y avoir plusieurs colonnes portant le même nom, nous devons tout d'abord renommer les colonnes . Voici le code de la solution.

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
0
Thunder