You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas提取DataFrame列DCG_开头至</div>前内容的正确方法

问题说明

存储HTML内容的DataFrame列单元格示例:

<div data-wrapper="true" style="font-size:9pt;font-family:'Segoe UI','Helvetica Neue',sans-serif;"><div>DCG_QLKNDFALGKFNDGOIQERKNGLÑADKFNGOWQIREG</div></div>

清洗目标:保留从DCG_起始、到</div>标签前的内容,预期输出为:

DCG_QLKNDFALGKFNDGOIQERKNGLÑADKFNGOWQIREG

不同单元格内DCG_和</div>的位置不固定,原有实现代码执行后全列返回null:

df['html'] = df['html'].str[df['html'.str.find('DCG_':]
错误原因

原有代码存在两个核心问题:

  • 语法错误:列名引用缺失右方括号,df['html'.str.find 属于非法写法,正确的列访问格式应为df['html']
  • 逻辑错误:切片仅写了起始位置规则,未定义终止位置,且直接将整列的find结果传入切片语法会导致索引错位,无法正确逐行匹配截取位置。
实现方案

推荐方案:正则提取(简洁稳定)

使用pandas内置的向量化正则提取方法,直接匹配目标规则,无需手动计算位置,容错性更高:

# 匹配规则:捕获DCG_开头,后续所有直到<标签前的内容
df['html'] = df['html'].str.extract(r'(DCG_[^<]+)')

备选方案:位置切片

如果希望用位置截取的逻辑实现,可分别计算每行的起始、终止位置后再切片:

# 逐行计算DCG_的起始索引
start = df['html'].str.find('DCG_')
# 从DCG_位置往后查找最近的</div>索引
end = df['html'].apply(lambda x: x.find('</div>', x.find('DCG_')))
# 逐行切片取值
df['html'] = [s[st:ed] for s, st, ed in zip(df['html'], start, end)]

两种方案都能适配目标内容位置不固定的场景,正则方案代码更简洁,对HTML结构小变动的适配性更好。

内容的提问来源于stack exchange,提问作者Berny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:36:17