Pandas新增列提取最后分隔符后内容 无需预知分隔符数量
解决方案
不需要提前预知每个字符串内的点号数量,直接取split结果的最后一个元素即可,实现代码如下:
x2['Desired Column Values'] = x2['Column X'].str.split('.').str[-1]
实现逻辑
- 调用
.str.split('.')将列内每个字符串按.分隔为列表 - Python原生支持负索引取值,
.str[-1]会直接返回每个列表的最后一位元素,也就是最后一个.之后的内容,完全适配点号数量不固定的场景
性能更优的可选方案
如果数据集规模较大、单个字符串长度较长,可以使用从右向左拆分的rsplit方法,仅拆分1次就可以拿到目标值,不需要遍历整个字符串做全量分割,执行效率更高:
# 从右侧开始按.拆分,最多拆分1次,拆分后取索引为1的元素即为目标值 x2['Desired Column Values'] = x2['Column X'].str.rsplit('.', n=1).str[1]
结果验证
针对给出的示例数据,两种方法返回的结果完全匹配预期:
www.xyz.hgk.lmo.de.eu.price→pricewww.amazon.us.stock→stockwww.hhhh.com.price→pricewww.ebay.eu.stock→stockwww.mmm.price→price
之前使用固定索引
.str[2]的写法只能适配拆分后列表长度≥3、且目标值固定在第3位的场景,无法适配长度不固定的字符串。
内容的提问来源于stack exchange,提问作者Mahmoud Wahba
相关产品推荐
相关产品推荐

