Python 3.10从URL字符串提取斜杠间数值及关联行ID
解决方法
步骤1:编写匹配前缀与目标数值的正则表达式
需要精准匹配两类核心内容:
- 前缀:以
Domain开头、以Id结尾的字符串(如DomainId、DomainSiteId,兼容输入中可能的拼写变体) - 数值:前缀后斜杠之间的5-9位数字
对应的正则表达式:(Domain\w*Id)/(\d{5,9})
(Domain\w*Id):捕获前缀部分,\w*匹配中间任意字母数字,适配不同前缀写法(\d{5,9}):严格捕获5-9位的目标数值
步骤2:提取数据并重塑表格
利用pandas的字符串提取工具获取匹配结果,再通过透视表将长格式数据转为期望的宽格式,最后关联原表的id列。
完整代码示例
import pandas as pd # 示例数据 data = { "id": [1, 2, 3], "url": [ "https://company.db.abcd.com/DomainId/123456789/Other", "https://company.db.abcd.com/DomainSiteId/123456/Other", "https://companyaddedwords.db.abcd.com/DomainId/1234567/Other" ] } df = pd.DataFrame(data) # 提取前缀和对应数值 extracted = df.url.str.extract(r'(Domain\w*Id)/(\d{5,9})', expand=True) extracted.columns = ["prefix", "value"] extracted["id"] = df["id"] # 转换为宽表格式 result = extracted.pivot(index="id", columns="prefix", values="value").reset_index() # 修正列名(适配输入中可能的拼写错误) result = result.rename(columns={"DomainainSiteId": "DomainSiteId"}) print(result)
输出结果
id DomainId DomainSiteId 0 1 123456789 NaN 1 2 NaN 123456 2 3 1234567 NaN
补充说明
- 如果原数据中确实存在
DomainainSiteId这类特殊前缀,正则会自动匹配,只需在rename中对应调整列名即可 - 若单个URL可能包含多个匹配项,替换为
str.extractall后再做分组处理即可
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

