J'ai un dataframe pandas avec les noms de colonnes suivants:
Résultat1, Test1, Résultat2, Test2, Résultat3, Test3, etc ...
Je souhaite 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 ça?
Voici une façon de procéder:
la source
df.drop(list(df.filter(regex = 'Test')), axis = 1, inplace = True)
list(df.filter(regex='Test'))
pour mieux montrer ce que fait la ligne. J'opterais également pourdf.filter(regex='Test').columns
la conversion sur listeregex
mot - clé lorsque lelike
mot - clé semble être plus adéquat.filter
est qu'il renvoie une copie de TOUTES les données sous forme de colonnes que vous souhaitez supprimer. C'est un gaspillage si vous ne transmettez ce résultat qu'àdrop
(qui renvoie à nouveau une copie) ... une meilleure solution seraitstr.startswith
(j'ai ajouté une réponse ici).Moins cher, plus rapide et idiomatique:
str.contains
Dans les versions récentes de pandas, vous pouvez utiliser des méthodes de chaîne sur l'index et les colonnes. Ici,
str.startswith
semble être un bon ajustement.Pour supprimer toutes les colonnes commençant par une sous-chaîne donnée:
Pour la correspondance insensible à la casse, vous pouvez utiliser la correspondance basée sur les expressions régulières avec
str.contains
avec une ancre SOL:si les types mixtes sont une possibilité, spécifiez
na=False
également.la source
Vous pouvez filtrer les colonnes que vous voulez en utilisant «filtre»
Maintenant filtre
Avoir..
la source
not like='result'
Cela peut être fait en une seule ligne avec:
la source
df.drop(df.filter(regex='Test').columns, axis=1, inplace=True)
Utilisez la
DataFrame.select
méthode:la source
FutureWarning: 'select' is deprecated and will be removed in a future release. You can use .loc[labels.map(crit)] as a replacement
import re
avance.Cette méthode fait tout en place. La plupart 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)
la source
Ne laissez pas tomber. Attrapez le contraire de ce que vous voulez.
la source
le moyen le plus court est de:
la source
Solution lors de la suppression d'une liste de noms de colonnes contenant des regex. Je préfère cette approche car je modifie fréquemment la liste déroulante. Utilise une expression régulière de filtre négatif pour la liste déroulante.
la source