替换数据帧列 (正则表达式) 中的值



我有一个数据帧列,上面有名称:

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。我尝试了很多事情,但似乎无法弄清楚。

任何帮助将不胜感激:(

你可以做:

df['Names'] = df.Names.replace('^([a-zA-Z]{3})-0?(d{2})(.*)$', r'1-02', regex=True)

输出:

Names
0  ROS-053
1  ROS-054
2  ROS-051
3  ROS-051
4  ROS-051
5  ROS-052

下面是使用正则表达式替换和回调的一个选项:

repl = lambda m: m.group(1) + ('00' + m.group(2))[-3:] + m.group(3)
df.str.replace(r'^([A-Z]{3}-)(d+)(.*)$', repl)

请注意,此答案很灵活,并且仅将零留到三位数的零或两位数。

这是另一种方法:

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)

输出:

Names
0  ROS-053
1  ROS-054
2  ROS-051
3  ROS-051
4  ROS-051
5  ROS-052

最新更新