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"\(.*\)","")
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))
.
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.