如何从pandas数据框的HTML格式description列提取字段生成新列
实现方法
方案一:BeautifulSoup HTML解析(推荐,容错性强)
先安装依赖库:pip install beautifulsoup4 lxml
完整执行代码:
import pandas as pd from bs4 import BeautifulSoup # 定义单条description解析函数 def parse_description(html_str): soup = BeautifulSoup(html_str, "lxml") kv = {} for b_tag in soup.find_all("b"): # 提取<b>标签内容作为列名,去掉末尾的冒号 col = b_tag.get_text().strip().removesuffix(":") # 提取<b>标签后紧跟的文本内容作为值 val = b_tag.next_sibling.strip() kv[col] = val return pd.Series(kv) # 批量解析description列,合并到原数据表 extracted_cols = data["description"].apply(parse_description) data = pd.concat([data, extracted_cols], axis=1).drop(columns=["description"])
运行完成后,原description里的所有<b>标签对应的字段都会自动生成为新列,对应值填充到对应行,缺失字段自动填充NaN。
方案二:正则表达式匹配(无额外依赖,适合格式固定的场景)
如果你的description格式严格统一,不需要额外安装解析库,直接用pandas内置的正则方法即可:
import re # 匹配<b>标签的键值对规则 pattern = r"<b>(.*?):</b>\s*(.*?)(?:<br>|\n|</div>)" extracted_cols = data["description"].str.extractall(pattern)\ .groupby(level=0)\ .apply(lambda x: x.set_index(0)[1].unstack()) data = pd.concat([data, extracted_cols], axis=1).drop(columns=["description"])
内容的提问来源于stack exchange,提问作者IPII
相关产品推荐
相关产品推荐

