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)).
小智 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)
这是您还可以删除不需要的错误的方法
如果(...)数据中有多个子字符串,则应考虑使用
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()将摆脱任何潜在的尾随空白。