使用 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 中的字符串中删除括号的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式避免 pandas str.replace

Pandas .str.replace 和不区分大小写

无法从带有Pandas的CSV标头中删除空格

用 pandas str.replace 替换多个子字符串值

23、pandas的多列拼接成一列函数.str.cat()

Pandas - 使用模式/正则表达式编辑索引