如何批量移除Pandas DataFrame文本列中的所有HTML标签
pandas DataFrame 列批量清理HTML标签方案
不需要手动维护HTML标签列表,直接用以下两种成熟方案即可实现全量标签移除:
方案1:正则匹配批量移除(轻量高效)
pandas 自带的str.replace方法支持正则匹配,无需逐个枚举标签替换,只需编写规则匹配所有被<>包裹的标签内容即可。注意需要开启正则匹配参数,避免旧版本pandas默认按普通字符串匹配导致规则失效。
对应实现代码:
# 正则规则说明:匹配所有<开头、>结尾的标签内容,[^>]+确保匹配到第一个>就终止,不会误吞标签外的文本 df["text_col_clean"] = df["text_col"].str.replace(r'<[^>]+>', '', regex=True)
用提供的示例数据运行后,输出结果为:
['n', ' bla bla bla ', 'bla bla , , , ', 'bla bla bla : , , ']
如果需要同步清理冗余空白,可以衔接字符串处理逻辑做二次清洗:
df["text_col_clean"] = ( df["text_col"] .str.replace(r'<[^>]+>', '', regex=True) # 移除所有HTML标签 .str.replace(r'\s+', ' ', regex=True) # 将连续多个空白字符合并为单个空格 .str.strip() # 移除字符串首尾的空白字符 )
方案2:HTML解析库清理(鲁棒性更强)
如果数据存在大量残缺不闭合标签、HTML转义字符(比如 /&这类实体字符),正则匹配容易出现漏删、误删问题,建议用专门的HTML解析库处理,容错率更高。
首先安装依赖库:
pip install beautifulsoup4
对应实现代码:
from bs4 import BeautifulSoup def clean_html(text): # 处理空值、非字符串类型值,避免运行报错 if not isinstance(text, str): return "" soup = BeautifulSoup(text, "html.parser") # 提取纯文本,自动处理转义字符、残缺标签 return soup.get_text(separator=" ", strip=True) df["text_col_clean"] = df["text_col"].apply(clean_html)
选型参考
- 数据量较大、标签格式基本规范时,选正则方案,执行速度更快
- 数据质量参差不齐、存在大量不规范标签/转义字符时,选解析库方案,清理结果更准确
内容的提问来源于stack exchange,提问作者Jazz
相关产品推荐
相关产品推荐

