Je comprends que pour supprimer une colonne, vous utilisez df.drop ('nom de la colonne', axis = 1). Existe-t-il un moyen de supprimer une colonne en utilisant un index numérique au lieu du nom de la colonne?
Je comprends que pour supprimer une colonne, vous utilisez df.drop ('nom de la colonne', axis = 1). Existe-t-il un moyen de supprimer une colonne en utilisant un index numérique au lieu du nom de la colonne?
Réponses:
Vous pouvez supprimer la colonne sur l' i
index comme ceci:
df.drop(df.columns[i], axis=1)
Cela pourrait fonctionner bizarrement, si vous avez des noms en double dans les colonnes, vous pouvez donc 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)
inplace=True
est utilisé pour effectuer les modifications dans la trame de données elle-même sans faire tomber la colonne sur une copie de la trame de données. Si vous devez conserver votre original intact, utilisez:
df_after_dropping = df.drop(df.columns[cols],axis=1)
inplace=True
vous devrez le faire df = df.drop()
si vous voulez voir le changement en df
soi.
S'il y a plusieurs colonnes avec des noms identiques, les solutions données ici jusqu'à présent supprimeront toutes les colonnes, ce qui peut ne pas être 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 voir, 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 voir, cela n'a vraiment supprimé que la 0ème colonne (premier «x»).
Vous devez identifier les colonnes en fonction de leur position dans le dataframe. Par exemple, si vous souhaitez supprimer (supprimer) les numéros de colonne 2,3 et 5, ce sera,
df.drop(df.columns[[2,3,5]], axis = 1)
Si vous avez deux colonnes avec le même nom. Un moyen simple consiste à renommer manuellement les colonnes comme ceci: -
df.columns = ['column1', 'column2', 'column3']
Ensuite, vous pouvez déposer via l'index de colonne comme vous l'avez demandé, comme ceci: -
df.drop(df.columns[1], axis=1, inplace=True)
df.column[1]
supprimera l'index 1.
Souvenez-vous que l'axe 1 = colonnes et l'axe 0 = lignes.
si vous voulez vraiment le faire avec des entiers (mais pourquoi?), vous pouvez créer un dictionnaire.
col_dict = {x: col for x, col in enumerate(df.columns)}
puis 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, bien que 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 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)