web-dev-qa-db-fra.com

Comment supprimer les parenthèses et toutes les données à l'aide de Pandas / Python?

J'ai une trame de données où je veux supprimer toutes les parenthèses et tout ce qu'il contient.

J'ai vérifié: Comment puis-je supprimer du texte entre parenthèses avec une expression régulière?

Où était la réponse pour supprimer les données

re.sub(r'\([^)]*\)', '', filename)

J'ai essayé ça aussi bien que

re.sub(r'\(.*?\)', '', filename)

Cependant, j'ai eu une erreur: expected a string or buffer

Lorsque j'ai essayé d'utiliser la colonne df['Column Name'], J'ai eu no item named 'Column Name'

J'ai vérifié la trame de données en utilisant df.head() et elle est apparue comme une table propre avec les noms de colonne comme ce que je voulais qu'ils soient .... cependant quand j'utilise l'expression re pour supprimer le (truc) ça ne reconnaît pas le nom de la colonne que j'ai.

J'utilise normalement

df['name'].str.replace(" ()","") 

Cependant, je veux supprimer les parenthèses et ce qu'il y a à l'intérieur ... Comment puis-je faire cela en utilisant des expressions régulières ou des pandas?

Merci!

Voici la solution que j'ai utilisée ... merci pour l'aide!

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*\)","")
24
Alexis
df['name'].str.replace(r"\(.*\)","")

Vous ne pouvez pas exécuter les fonctions re directement sur les objets pandas. Vous devez les boucler pour chaque élément à l'intérieur de l'objet. Donc Series.str.replace((r"\(.*\)", "") est juste sucre syntaxique pour Series.apply(lambda x: re.sub(r"\(.*\)", "", x)).

41
dmvianna

Si vous avez plusieurs sous-chaînes (...) Dans les données, vous devriez envisager d'utiliser soit

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*?\)","")

ou

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\([^()]*\)","")

La différence est que .*? Est plus lent et ne correspond pas aux sauts de ligne, et [^()] correspond à n'importe quel caractère mais ( Et ) Et est assez efficace et correspond à sauts de ligne. Le premier correspondra à (...(...) Mais le second ne correspondra qu'à (...).

Si vous souhaitez normaliser tous les espaces après avoir supprimé ces sous-chaînes, vous pouvez envisager

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\s*\([^()]*\)","").str.strip()

La regex \s*\([^()]*\) correspondra à 0+ espaces blancs, puis la chaîne entre parenthèses, puis str.stip() se débarrassera de tout espace fin potentiel.

0
Wiktor Stribiżew