繁体   English   中英

替换 dataframe 列中的值(正则表达式)

[英]Replace values in dataframe column (regex)

我有一个 dataframe 列,其名称为:

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

任何帮助将不胜感激:)

这是使用带有回调的正则表达式替换的一种选择:

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

请注意,此答案是灵活的,并且将用零填充一位数或两位数,仅保留三位数字。

你可以做:

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

Output:

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

这是另一种方法:

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)

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM