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?
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]]
Déposez plusieurs colonnes comme ceci:
cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
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').
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)
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)
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)
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