Pandas如何删除DataFrame列中字符串最后一个连字符及其之后的内容
问题原因
你之前使用的正则-$仅匹配末尾恰好为连字符的字符串,仅能删除字符串末尾单独存在的-,完全匹配不到「最后一个连字符及其后所有内容」的模式,因此处理结果和原数据一致。
解决方案
这里提供两种实现方式,均为pandas矢量化操作,性能比apply更高:
方式1:使用字符串右拆分(更简洁,推荐)
从右往左查找第一个连字符,仅拆分1次后取前半部分即可,无连字符的字符串会直接返回原值:
df['result'] = df['id'].str.rsplit('-', n=1).str[0]
方式2:使用正则替换
修改正则匹配规则,匹配最后一个连字符到字符串末尾的所有内容,替换为空:
df['result'] = df['id'].str.replace(r'-[^-]*$', '', regex=True)
正则规则说明:
-匹配连字符本身[^-]*匹配0个及以上非连字符的字符$锚定匹配位置到字符串末尾,确保匹配的是最后一个连字符及之后的内容
两种方式执行后得到的result列完全符合你的预期输出。
内容的提问来源于stack exchange,提问作者user13925399
相关产品推荐
相关产品推荐

