如何使用 Pandas/Python 删除括号和其中的所有数据?
- 2025-03-21 09:07:00
- admin 原创
- 68
问题描述:
我有一个数据框,我想删除其中的所有括号和内容。
我检查了一下:
如何使用正则表达式删除括号内的文本?
删除数据的答案是
re.sub(r'([^)]*)', '', filename)
我也尝试过
re.sub(r'(.*?)', '', filename)
但是,我收到了一个错误:expected a string or buffer
df['Column Name']
当我尝试使用我得到的列时no item named 'Column Name'
我使用检查了数据框df.head()
,它显示为一个干净的表,其列名正是我想要的......但是当我使用re
表达式删除(东西)时,它无法识别我拥有的列名。
我通常使用
df['name'].str.replace(" ()","")
但是,我想删除括号及其里面的内容……如何使用正则表达式或熊猫来做到这一点?
谢谢!
这是我使用的解决方案...感谢您的帮助!
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"(.*)","")
解决方案 1:
df['name'].str.replace(r"(.*)","")
您不能直接在 pandas 对象上运行re函数。您必须对对象内的每个元素循环它们。所以Series.str.replace((r"(.*)", "")
这只是 的语法糖Series.apply(lambda x: re.sub(r"(.*)", "", x))
。
解决方案 2:
(...)
如果数据中有多个子字符串,则应考虑使用
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"(.*?)", "", regex=True)
或者
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"([^()]*)", "", regex=True)
不同之处在于.*?
速度较慢,不匹配换行符,并且[^()]
匹配任何字符,但(
和)
非常高效,并且匹配换行符。第一个会匹配(...(...)
,但第二个只会匹配(...)
。
如果要在删除这些子字符串后规范化所有空格,您可以考虑
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"s*([^()]*)", "", regex=True).str.strip()
正则表达式s*([^()]*)
将匹配 0+ 个空格,然后匹配括号之间的字符串,然后str.stip()
将删除任何潜在的尾随空格。
注意regex=True
:
根据Pandas 1.2.0 发行说明:
在将来的版本中, regex的默认值将从True
Series.str.replace()
更改为False。此外,当设置regex=True时,单字符正则表达式将不会被视为文字字符串( GH24804)。
解决方案 3:
删除不需要的字符
Energy['Country'] = Energy['Country'].str.replace(r" (.*)","")
引用
Energy['Country'] = Energy['Country'].str.replace(r"([0-9]+)$","")
你也可以通过这些方法删除不需要的错误
解决方案 4:
以上所有答案看起来都很棒;但是,以下链接提供了更好的理解。a)https://docs.python.org/3/howto/regex.html#regex-howto
b)https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html
总而言之,要替换不需要的字符,您必须使用 pandas.DataFrame.replace 函数。例如,要从数据框中删除 [],可以执行以下操作。
import re
p=re.compile('[]') %% regular expression for matching [] (see reference (a)
result.replace(to_replace=p,value="",inplace=False,regex=True) %%For a dataframe named result, this way one can replace [] with "". see reference (b)
扫码咨询,免费领取项目管理大礼包!