首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换dataframe列中的值(regex)

问替换dataframe列中的值(regex)
EN

Stack Overflow用户
提问于 2020-06-16 12:10:00
回答 3查看 62关注 0票数 1

我有一个名为dataframe的列:

代码语言:javascript
复制
df = pd.DataFrame({'Names': ['ROS-053', 'ROS-54', 'ROS-51', 'ROS-051B', 'ROS-051A', 'ROS-52']}) 
df.replace(to_replace=r'[a-zA-Z]{3}-\d{2}$', value='new', regex=True)

格式需要三个字母,然后是三个数字。所以ROS-51应该换成ROS-051。ROS-051B应该是ROS-051。我试过很多东西,但似乎想不出来。

如能提供任何帮助,将不胜感激:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-16 12:24:48

你可以:

代码语言:javascript
复制
df['Names'] = df.Names.replace('^([a-zA-Z]{3})-0?(\d{2})(.*)$', r'\1-0\2', regex=True)

输出:

代码语言:javascript
复制
     Names
0  ROS-053
1  ROS-054
2  ROS-051
3  ROS-051
4  ROS-051
5  ROS-052
票数 0
EN

Stack Overflow用户

发布于 2020-06-16 12:15:41

下面是用回调替换regex的一个选项:

代码语言:javascript
复制
repl = lambda m: m.group(1) + ('00' + m.group(2))[-3:] + m.group(3)
df.str.replace(r'^([A-Z]{3}-)(\d+)(.*)$', repl)

注意,这个答案是灵活的,将留下零

票数 0
EN

Stack Overflow用户

发布于 2020-06-16 12:36:52

另一种方法是:

代码语言:javascript
复制
df = pd.DataFrame({'Names': ['ROS-053', 'ROS-54', 'ROS-51', 'ROS-051B', 'ROS-051A', 'ROS-52']}) 
df['Names'] = df['Names'].str.replace(r'[A-Z]$', '')
df['Names'] = df['Names'].str.split('-').str[0] + '-' + df['Names'].str.split('-').str[1].apply(lambda x: x.zfill(3))
print(df)

输出:

代码语言:javascript
复制
     Names
0  ROS-053
1  ROS-054
2  ROS-051
3  ROS-051
4  ROS-051
5  ROS-052
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62408157

复制
相关文章

相似问题

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