如何用Pandas移除字符串中最后一个连字符后的内容?
问题解决:移除字符串最后一个连字符后的内容
需求:移除包含连字符(-)的字符串中最后一个连字符之后的部分,不含连字符的字符串保持原样。
示例数据
| Name1 | ID | 期望结果 |
|---|---|---|
| FUH-V2 | FUH07V2NUM | FUH07V2NUM |
| FUH-V2 | FUHV2-DEN | FUHV2 |
| FUH-V2 | FUH30V2NUM | FUH30V2NUM |
问题分析
你尝试的代码df['ID'].str.split('-').str[:-1].str.join('-')存在缺陷:当字符串不含连字符时,分割后得到长度为1的列表,[:-1]会截取空内容,最终返回空字符串,不符合“保持原字符串不变”的要求。
正确解决方案
使用str.rsplit()指定仅分割1次,再取分割后的第一个元素即可满足需求:
df['ID_SPLIT'] = df['ID'].str.rsplit('-', n=1).str[0]
代码说明
str.rsplit('-', n=1):从字符串右侧开始,仅对连字符做1次分割,返回分割后的列表。例如"FUHV2-DEN"会被拆分为["FUHV2", "DEN"],不含连字符的字符串则返回仅包含自身的列表(如["FUH07V2NUM"])。.str[0]:提取分割后列表的第一个元素,刚好实现——含连字符的取最后一个连字符前的部分,不含连字符的保留原字符串。
验证结果
运行上述代码后,ID_SPLIT列会得到符合预期的结果:
| Name1 | ID | ID_SPLIT |
|---|---|---|
| FUH-V2 | FUH07V2NUM | FUH07V2NUM |
| FUH-V2 | FUHV2-DEN | FUHV2 |
| FUH-V2 | FUH30V2NUM | FUH30V2NUM |
内容的提问来源于stack exchange,提问作者Tinkinc
相关产品推荐
相关产品推荐

