如何从pandas列存储的URL中提取指定子串并存入新列
pandas从URL列提取指定子串的正确实现
原有代码存在两个错误:
- 匿名函数内部误用了未定义的变量
st,应该替换为当前遍历的变量x find("/")只会匹配第一个斜杠的位置,无法定位到目标子串前的最后一级路径斜杠
方案1:使用pandas内置str.extract(推荐)
用正则匹配直接提取目标片段,性能远高于apply,代码更简洁:
import pandas as pd s = pd.Series(['https://url-location/img/xxxyyy_image1.png']) # 提取目标子串,expand=False返回Series而非DataFrame extracted = s.str.extract(r'.*/([^_]+)_.*', expand=False) # 若是DataFrame要存入新列,写法为: # df['new_col'] = df['url_col'].str.extract(r'.*/([^_]+)_.*', expand=False)
正则说明:.* / 贪婪匹配到最后一个斜杠位置,([^_]+) 捕获所有非下划线的字符(即目标子串xxxyyy),后续_.*匹配下划线后的剩余内容。
方案2:修正原有apply写法
如果坚持使用切片逻辑,修正后写法如下:
extracted = s.apply(lambda x: x[x.rfind("/")+1 : x.find("_", x.rfind("/")+1)])
逻辑说明:用rfind("/")定位最后一个斜杠的索引,作为切片起始位置,再从该起始位置往后查找第一个下划线的索引作为切片结束位置。
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

