web-dev-qa-db-fra.com

Comment supprimer toutes les colonnes de DataFrame, à l'exception de certaines?

Disons que j'ai un DataFrame qui ressemble à ceci:

a  b  c  d  e  f  g  
1  2  3  4  5  6  7
4  3  7  1  6  9  4
8  9  0  2  4  2  1

Comment pourrais-je supprimer toutes les colonnes à part a et b?

Cela se traduirait par:

a  b
1  2
4  3
8  9

Je voudrais un moyen de les supprimer en utilisant une simple ligne de code qui dit, supprimez toutes les colonnes à part a et b, car supposons que j'ai 1000 colonnes de données.

Je vous remercie.

6
sgerbhctim
In [48]: df.drop(df.columns.difference(['a','b']), 1, inplace=True)
Out[48]:
   a  b
0  1  2
1  4  3
2  8  9

ou:

In [55]: df = df.loc[:, df.columns.intersection(['a','b'])]

In [56]: df
Out[56]:
   a  b
0  1  2
1  4  3
2  8  9

PS s'il vous plaît soyez conscient que la la façon la plus idiomatique des Pandas de faire cela a déjà été proposée par @Wen :

df = df[['a','b']]

ou

df = df.loc[:, ['a','b']]
12
MaxU

il y a plusieurs solutions.

df=df[['a','b']]#1

df=df[list('ab')]#2

df=df.loc[:,df.columns.isin(['a','b'])]#3

df=pd.DataFrame(data=df.eval('a,b').T,columns=['a','b'])#4 PS:I do not recommend this method , but still a way to achieve this 
6
Wen-Ben

Une autre option à ajouter au mélange. Je préfère cette approche pour la lisibilité.

df = df.filter(['a', 'b'])

ou simplement

df.filter(['a', 'b'])

Prime

Vous pouvez également utiliser un argument like ou regex pour filtrer.
Utile si vous avez un ensemble de colonnes comme ['a_1','a_2','b_1','b_2']

Vous pourriez faire

df.filter(like='b_')

et se retrouver avec ['b_1','b_2']

Documentation Pandas pour le filtre.

1
GollyJer

Si vous souhaitez uniquement conserver plus de colonnes que vous n'en déposez, insérez un "~" avant l'instruction .isin pour sélectionner toutes les colonnes, à l'exception de celles de votre choix:

df = df.loc[:, ~df.columns.isin(['a','b'])]
0
Isaac Taylor