216 votes

Supprimer les colonnes dont le nom contient une chaîne spécifique à partir du DataFrame pandas

J'ai un dataframe pandas avec les noms de colonnes suivants:

Résultat1, Test1, Résultat2, Test2, Résultat3, Test3, etc...

Je veux supprimer toutes les colonnes dont le nom contient le mot "Test". Le nombre de ces colonnes n'est pas statique mais dépend d'une fonction précédente.

Comment puis-je faire cela?

13voto

Roy Assis Points 161

Utilisation d'une regex pour faire correspondre toutes les colonnes ne contenant pas le mot indésirable :

df = df.filter(regex='^((?!badword).)*$')

11voto

Phillip Cloud Points 6685

Utilisez la méthode DataFrame.select:

In [38]: df = DataFrame({'Test1': randn(10), 'Test2': randn(10), 'impressionnant': randn(10)})

In [39]: df.select(lambda x: not re.search('Test\d+', x), axis=1)
Out[39]:
   impressionnant
0    1.215
1    1.247
2    0.142
3    0.169
4    0.137
5   -0.971
6    0.736
7    0.214
8    0.111
9   -0.214

8voto

winderland Points 96

Cette méthode fait tout sur place. Beaucoup des autres réponses créent des copies et ne sont pas aussi efficaces :

df.drop(df.columns[df.columns.str.contains('Test')], axis=1, inplace=True)

8voto

Marvasti Points 79

La question indique 'Je veux supprimer toutes les colonnes dont le nom contient le mot "Test".'

colonnes_test = [col for col in df if 'Test' in col]
df.drop(columns=colonnes_test, inplace=True)

4voto

ZacNt Points 49

Vous pouvez utiliser df.filter pour obtenir la liste des colonnes qui correspondent à votre chaîne, puis utilisez df.drop

resdf = df.drop(df.filter(like='Test',axis=1).columns.to_list(), axis=1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X