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

2024-06-08 01:14:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,我想删除所有括号和里面的东西。

我退房了: How can I remove text within parentheses with a regex?

删除数据的答案是

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

我也试过了

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

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

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

我使用df.head()检查了数据帧,它显示为一个干净的表,列名称与我希望的一样……但是当我使用re表达式删除(stuff)时,它无法识别我拥有的列名称。

我通常使用

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

但是,我想删除括号和里面的内容…我如何使用regex或pandas做到这一点?

谢谢!

这是我使用的解决方案…谢谢你的帮助!

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

Tags: 数据namere名称dfcolumnallfilename
2条回答

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

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

或者

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

区别在于.*?速度较慢,不匹配换行符,而[^()]匹配除()之外的任何字符,并且非常高效,匹配换行符。第一个匹配(...(...),而第二个只匹配(...)

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

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

正则表达式\s*\([^()]*\)将匹配0+空格,然后括号之间的字符串和^{}将去掉任何可能的尾随空格。

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

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

相关问题 更多 >

    热门问题