如何使用Pandas/Python删除括号和所有数据?

Ale*_*xis 26 python regex removeall pandas

我有一个数据框,我想删除其中的所有括号和内容.

我检查了: 如何使用正则表达式删除括号内的文本?

删除数据的答案是

re.sub(r'\([^)]*\)', '', filename)
Run Code Online (Sandbox Code Playgroud)

我试过这个以及

re.sub(r'\(.*?\)', '', filename)
Run Code Online (Sandbox Code Playgroud)

但是,我收到了一个错误: expected a string or buffer

当我尝试使用df['Column Name']我得到的列no item named 'Column Name'

我检查了数据框使用df.head(),它显示为一个干净的表,列名称是我想要的...但是当我使用re表达式删除(东西)时,它不识别我的列名称有.

我通常使用

df['name'].str.replace(" ()","") 
Run Code Online (Sandbox Code Playgroud)

但是,我想删除括号和内部的内容....如何使用正则表达式或pandas执行此操作?

谢谢!

这是我用过的解决方案......感谢您的帮助!

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*\)","")
Run Code Online (Sandbox Code Playgroud)

dmv*_*nna 45

df['name'].str.replace(r"\(.*\)","")
Run Code Online (Sandbox Code Playgroud)

您不能直接在pandas对象上运行re函数.您必须为对象内的每个元素循环它们.所以Series.str.replace((r"\(.*\)", "")只是语法糖Series.apply(lambda x: re.sub(r"\(.*\)", "", x)).

  • @B_Furtado:`"\(.*\)"`或`"\ s \(.*\)\ s"`,假设你__always__在任一侧有一个空格.如果要替换任意数量的空格(包括无),请使用`"\ s*\(.*\)\ s*"`.你应该学习**正则表达式**语法,对于像这样的简单匹配来说并不难.检查https://docs.python.org/3/library/re.html. (2认同)

小智 6

#删除不需要的字符

Energy['Country'] = Energy['Country'].str.replace(r" \(.*\)","")
Run Code Online (Sandbox Code Playgroud)

块引用

Energy['Country'] = Energy['Country'].str.replace(r"([0-9]+)$","")
Run Code Online (Sandbox Code Playgroud)

这是您还可以删除不需要的错误的方法


Wik*_*żew 5

如果(...)数据中有多个子字符串,则应考虑使用

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*?\)","")
Run Code Online (Sandbox Code Playgroud)

或者

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\([^()]*\)","")
Run Code Online (Sandbox Code Playgroud)

不同之处在于.*?它更慢并且不匹配换行符,并且[^()]匹配任何字符,但是(and)非常有效并且匹配换行符。第一个会匹配,(...(...)但第二个只会匹配(...)

如果您想在删除这些子字符串后规范化所有空格,您可以考虑

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

\s*\([^()]*\)正则表达式匹配0+空格,然后括号之间的字符串,然后str.stip()将摆脱任何潜在的尾随空白。