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.
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']]
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
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'])
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']
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'])]