python dataframe pandas supprime la colonne en utilisant int
155
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?
Vous pouvez supprimer la colonne sur l' iindex 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]]
Je pense que vous avez manqué le point - ils veulent déposer par index, pas par étiquette. La conversion de l'index en une étiquette est simplement en baisse par étiquette :(
Darren
Comment indexer les cols, si je dois supprimer 100 colonnes continues au milieu de la trame de données
inplace=Trueest 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:
si vous ne l'utilisez pas, inplace=Truevous devrez le faire df = df.drop()si vous voulez voir le changement en dfsoi.
muon
Comment indexer les cols, si je dois supprimer 100 colonnes continues au milieu du bloc de données.
Sai Kiran
36
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
000611172228333944410# attempting to drop the first column according to the solution offered so far
df.drop(df.columns[0], axis =1)
y
06172839410
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
0061172283394410
Comme vous pouvez le voir, cela n'a vraiment supprimé que la 0ème colonne (premier «x»).
Tu es mon héro. J'essayais de penser à une manière intelligente de le faire pendant trop longtemps.
ATK7474
5
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,
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)
Réponses:
Vous pouvez supprimer la colonne sur l'
i
index comme ceci: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:
la source
Déposez plusieurs colonnes comme ceci:
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:la source
inplace=True
vous devrez le fairedf = df.drop()
si vous voulez voir le changement endf
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:
Comme vous pouvez le voir, les deux colonnes X ont été supprimées. Solution alternative:
Comme vous pouvez le voir, cela n'a vraiment supprimé que la 0ème colonne (premier «x»).
la source
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,
la source
Si vous avez deux colonnes avec le même nom. Un moyen simple consiste à renommer manuellement les colonnes comme ceci: -
Ensuite, vous pouvez déposer via l'index de colonne comme vous l'avez demandé, comme ceci: -
df.column[1]
supprimera l'index 1.Souvenez-vous que l'axe 1 = colonnes et l'axe 0 = lignes.
la source
si vous voulez vraiment le faire avec des entiers (mais pourquoi?), vous pouvez créer un dictionnaire.
puis
df = df.drop(col_dict[0], 1)
fonctionnera comme vous le souhaitezedit: 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
la source
Vous pouvez utiliser la ligne suivante pour supprimer les deux premières colonnes (ou toute colonne dont vous n'avez pas besoin):
Référence
la source
Puisqu'il peut y avoir plusieurs colonnes avec le même nom, nous devons d'abord renommer les colonnes. Voici le code de la solution.
la source