首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串的一部分替换为'()‘

将字符串的一部分替换为'()‘
EN

Stack Overflow用户
提问于 2020-12-14 19:36:00
回答 3查看 65关注 0票数 1

我需要替换一些在数据帧的' country‘列中有'()’或数字的国家名称。例如,“多民族玻利维亚国”应改为“多民族玻利维亚国”。“Switzerland17”应为“瑞士”。

我正在使用下面的代码

代码语言:javascript
复制
df3['Country'] = df3['Country'].str.replace(r'[^(][\w]*[)]','')
df3['Country'] = df3['Country'].str.replace(r'[\d]*','')

我哪里出错了,你能帮我吗?

EN

回答 3

Stack Overflow用户

发布于 2020-12-14 19:39:55

代码语言:javascript
复制
\s*(?:\([^()]*\)|\d+)

说明

  • \s*匹配来自(的非捕获组
    • \([^()]*\)|\d+匹配0+空白字符..match ..) or match 1+ digits

  • )关闭非捕获组

Regex demo

代码语言:javascript
复制
df3['Country'] = df3['Country'].str.replace(r'\s*(?:\([^()]*\)|\d+)', '')

输出

代码语言:javascript
复制
       Country
0      Bolivia
1  Switzerland
票数 1
EN

Stack Overflow用户

发布于 2020-12-14 20:08:54

你应该使用

代码语言:javascript
复制
df3['Country'].str.replace(r"\s*(?:\d+|\([^()]*\))","").str.strip()

请参阅regex demo。详细信息:

  • \s* -零个或多个whitespaces
  • (?:\d+|\([^()]*\)) -一个或多个数字,或者(,然后是除()之外的零个或多个字符,最后是)

如果匹配恰好在开头,并且后面跟着空格,则.str.strip()是必需的。

请参阅Pandas测试:

代码语言:javascript
复制
>>> import pandas as pd
>>> df3 = pd.DataFrame({'Country':['Bolivia (Plurinational State of)','Switzerland17','(Republic of) Korea']})
>>> df3['Country'].str.replace(r"\s*(?:\d+|\([^()]*\))","").str.strip()
0        Bolivia
1    Switzerland
2          Korea
Name: Country, dtype: object
票数 1
EN

Stack Overflow用户

发布于 2020-12-14 19:41:09

我将使用以下模式:‘(^)|[\d.]’|字符使您可以在一行中使用多个模式。

代码语言:javascript
复制
df = pd.DataFrame({'Country':['Bolivia (Plurinational State of)','Switzerland17']})

原始df:

代码语言:javascript
复制
    Country
0   Bolivia (Plurinational State of)
1   Switzerland17

建议的代码:

代码语言:javascript
复制
df['Country'] = df['Country'].str.replace(r'\([^)]*\)|[\d.*]','',regex=True)

输出:

代码语言:javascript
复制
    Country
0   Bolivia
1   Switzerland
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65288351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档