J'ai un dataframe ressembler à ceci:
import pandas
import numpy as np
df = DataFrame(np.random.Rand(4,4), columns = list('abcd'))
df
a b c d
0 0.418762 0.042369 0.869203 0.972314
1 0.991058 0.510228 0.594784 0.534366
2 0.407472 0.259811 0.396664 0.894202
3 0.726168 0.139531 0.324932 0.906575
Comment puis-je obtenir toutes les colonnes sauf column b
?
Lorsque vous ne disposez pas d'un MultiIndex, df.columns
n'est qu'un tableau de noms de colonnes, ce qui vous permet d'effectuer les tâches suivantes:
df.loc[:, df.columns != 'b']
a c d
0 0.561196 0.013768 0.772827
1 0.882641 0.615396 0.075381
2 0.368824 0.651378 0.397203
3 0.788730 0.568099 0.869127
N'utilisez pas ix
. C'est obsolète . Le moyen le plus lisible et idiomatique de le faire est df.drop()
:
>>> df
a b c d
0 0.175127 0.191051 0.382122 0.869242
1 0.414376 0.300502 0.554819 0.497524
2 0.142878 0.406830 0.314240 0.093132
3 0.337368 0.851783 0.933441 0.949598
>>> df.drop('b', axis=1)
a c d
0 0.175127 0.382122 0.869242
1 0.414376 0.554819 0.497524
2 0.142878 0.314240 0.093132
3 0.337368 0.933441 0.949598
Notez que par défaut, .drop()
ne fonctionne pas in-situ; malgré le nom sinistre, df
est indemne de ce processus. Si vous voulez supprimer définitivement b
de df
, faites df.drop('b', inplace=True)
.
df.drop()
accepte également une liste d'étiquettes, par exemple. df.drop(['a', 'b'], axis=1)
supprimera la colonne a
et b
.
df[df.columns.difference(['b'])]
Out:
a c d
0 0.427809 0.459807 0.333869
1 0.678031 0.668346 0.645951
2 0.996573 0.673730 0.314911
3 0.786942 0.719665 0.330833
Vous pouvez utiliser df.columns.isin()
df.loc[:, ~df.columns.isin(['b'])]
Lorsque vous souhaitez supprimer plusieurs colonnes, il suffit de:
df.loc[:, ~df.columns.isin(['col1', 'col2'])]
Voici un autre moyen:
df[[i for i in list(df.columns) if i != '<your column>']]
Vous ne faites que passer toutes les colonnes à afficher sauf celle que vous ne voulez pas.
Une autre légère modification apportée à @Salvador Dali permet à une liste de colonnes d’exclure:
df[[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]
ou
df.loc[:,[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]
Je pense que la meilleure façon de faire est la voie mentionnée par @Salvador Dali. Non pas que les autres aient tort.
Parce que lorsque vous avez un ensemble de données dans lequel vous souhaitez simplement sélectionner une colonne et la placer dans une variable, le reste des colonnes dans une autre à des fins de comparaison ou de calcul. Ensuite, supprimer la colonne du jeu de données peut ne pas aider. Bien sûr, il existe également des cas d'utilisation.
x_cols = [x for x in data.columns if x != 'name of column to be excluded']
Ensuite, vous pouvez mettre ces collections de colonnes dans la variable x_cols
dans une autre variable telle que x_cols1
pour d’autres calculs.
ex: x_cols1 = data[x_cols]