首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python - regex将数据帧中的一列拆分为2列

Python - regex将数据帧中的一列拆分为2列
EN

Stack Overflow用户
提问于 2020-10-04 21:54:52
回答 2查看 44关注 0票数 0

我在数据帧中有一个列,其中的字符串是这样的"Boris“,其他的在括号之间有额外的文本,比如"Igor (king)”。我只想和Boris / Igor / ..。(删除括号之间的所有内容)。我试过了

代码语言:javascript
运行
复制
pattern = '(^[\w]*)(?:[w]* \()'
Test =df['column'].str.extract(pattern)

我只返回带有括号的名字:I get NaN / Igor /Nan

帮帮忙?

EN

回答 2

Stack Overflow用户

发布于 2020-10-04 22:07:27

代码语言:javascript
运行
复制
df = pd.DataFrame({'name': ['Boris', 'Igor (King)', "Jack (prince of Persia)"]})
df['name'] = df['name'].apply(lambda x: re.sub(r"\(.*\)", "", x).strip())

输出:

代码语言:javascript
运行
复制
    name
0   Boris
1   Igor
2   Jack
票数 0
EN

Stack Overflow用户

发布于 2020-10-04 23:17:21

如果您想保留第一个单词,并删除括号之间的以下内容,则必须扩展您的模式以匹配到结束括号。

您可以使用str.replace并在替换中使用捕获组1。

代码语言:javascript
运行
复制
^(\w+) \([^()]+\)

说明

  • ^ string
  • (\w+)
    • ^Group1的开始,匹配后跟空格的单词字符,或者使用\s+匹配1+空白字符,并使用与除()之外的任何字符匹配的negated character class(匹配到)

Regex demo

例如

代码语言:javascript
运行
复制
df = pd.DataFrame({'column': ['Boris', 'Igor (King)', 'Jack (prince of Persia)']})
df =df['column'].str.replace(r"^(\w+) \([^()]+\)", r"\1")
print(df)

输出

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

https://stackoverflow.com/questions/64195492

复制
相关文章

相似问题

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