Python如何删除字符串最后一个逗号后的内容并替换为and
问题实现方案
最优方案:正则批量替换
不需要循环遍历,直接用pandas向量化的正则替换功能即可满足所有需求,一行代码完成处理,自动适配所有场景:无逗号的内容原样保留,仅替换最后一个逗号为and。
import pandas as pd data = pd.read_csv("MCA Data.csv") # 正则匹配最后一个逗号及后续内容,替换为and+原有后续内容 data["Public_Transport_Route_Desc_New"] = data["Public_Transport_Route_Desc"].str.replace( pat = r',([^,]*)$', repl = r' and \1', regex = True )
正则逻辑说明
r',([^,]*)$':匹配字符串末尾最后一个逗号,同时捕获逗号之后所有不含逗号的内容r' and \1':将匹配到的内容替换为and加之前捕获到的逗号后内容,实现最后一个逗号的替换需求
原有rsplit思路修正
如果你想沿用你原本的拆分拼接思路,只需要给rsplit加最大拆分参数n=1,即可拆分出最后一个逗号前后的内容,再拼接即可:
import pandas as pd data = pd.read_csv("MCA Data.csv") # 按最后一个逗号拆分,最多拆为两段 split_res = data["Public_Transport_Route_Desc"].str.rsplit(',', n=1, expand=True) # 有逗号的场景拼接and,无逗号的场景保留原值 data["Public_Transport_Route_Desc_New"] = split_res.apply( lambda x: f"{x[0]} and {x[1]}" if pd.notna(x[1]) else x[0], axis=1 )
两种方案都完全覆盖你给出的所有示例场景,不需要额外新增临时字段、不需要循环判断,处理效率远高于遍历iterrows的写法。
内容的提问来源于stack exchange,提问作者Kimchi
相关产品推荐
相关产品推荐

