使用 str.replace 从 pandas 中的字符串中删除括号
Posted
技术标签:
【中文标题】使用 str.replace 从 pandas 中的字符串中删除括号【英文标题】:Removing parenthesis from a string in pandas with str.replace 【发布时间】:2017-04-11 17:02:45 【问题描述】:我有一个国家/地区列表,其中一些国家/地区有空格和括号,例如,“玻利维亚(多民族国家)”。
为什么我下面的代码不能只保留“玻利维亚”?
energy['Country'] = energy['Country'].str.replace("Bolivia (Plurinational State of)","Bolivia")
【问题讨论】:
\(
匹配正则表达式中的(
另外:直接说energy['Country'].str.replace(... inplace=True)
。无需重新分配 LHS energy['Country'] = energy['Country'].str.replace(...)
【参考方案1】:
str.replace
使用正则表达式执行替换。必须对括号进行转义以将它们保持为简单字符:
energy['Country'].str.replace("Bolivia \(Plurinational State of\)","Bolivia")
您可以像这样自动转义:
import re
energy['Country'].str.replace(re.escape('Bolivia (Plurinational State of)'),"Bolivia")
【讨论】:
这行得通,但是我最终找到了一种不同的方法,可以去掉整个列中的所有括号。【参考方案2】:这删除了所有带有括号的实例:
energy['Country'] = energy['Country'].str.replace(r"\(.*\)","")
【讨论】:
在此版本中,您将得到尾随空格,因为您没有在左括号之前考虑它们。 为什么要在字符串字面量前加上'r'?我在网上搜索,用户说它返回一个原始字符串,将 \ 视为普通反斜杠而不是转义字符。但在这里它被用于相反的目的。为什么?【参考方案3】:energy['Country'] = energy['Country'].str.replace(r"\s+\(.*\)","")
@python_new_user 的解决方案,但解决了@Boud 提到的白色尾随问题
【讨论】:
【参考方案4】:使用@AdityaChaturvedi 的解决方案,我们还可以在\(
之前添加额外的\s
以删除括号之前的空格。我只是在 Pandas 中使用 DataFrame 以及国家列表,我正在处理这种特殊情况。
energy['Country'] = (energy['Country'].str.replace(r'\s\(.*\)','')).str.replace('\d+', '')
【讨论】:
【参考方案5】:energy['Country'] = (energy['Country'].str.replace(r' \(.*\)','')).str.replace('\d+', '')
这将删除括号和括号中的内容。这也将删除国家名称中的数字。
【讨论】:
以上是关于使用 str.replace 从 pandas 中的字符串中删除括号的主要内容,如果未能解决你的问题,请参考以下文章