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

如何将HTML标签移除逻辑应用到Pandas整列数据?

如何移除Pandas列中所有HTML标签,保留纯文本?

嘿,我懂你碰到的麻烦了:处理单个单元格的HTML标签没问题,但把逻辑扩展到整列时就报错了。咱们先搞清楚为啥之前的方法不行,再给你两个靠谱的解决方案。

为啥之前的方法会报错?

  • 方法一的问题:re.sub()是用来处理单个字符串的,而你传给它的new_read是Pandas的Series(一整列数据),它根本不知道怎么处理这种类型,所以直接抛出TypeError: expected string or bytes-like object。
  • 方法二的问题:apply()需要接收一个函数作为参数,而你直接把re.sub()的执行结果传进去了——这相当于你先给re.sub()喂了整列数据(同样会报错),再把错误结果传给apply,自然跑不起来。

正确的解决方案

方案1:用Pandas自带的str.replace(推荐,效率更高)

Pandas的字符串列(Series)有专门的str方法集,直接用str.replace就能批量处理整列,不用手动循环:

# 直接替换整列的HTML标签
df['description'] = df['description'].str.replace('<[^<]+?>', '', regex=True)

这里要记得加上regex=True,因为我们用了正则表达式匹配标签。

方案2:用apply结合自定义函数

如果你更习惯用re.sub的写法,也可以把处理逻辑封装成函数,再用apply批量应用到每个元素:

import re
import pandas as pd

def strip_html_tags(text):
    # 处理可能的空值(如果列里有NaN的话)
    if pd.isna(text):
        return text
    return re.sub('<[^<]+?>', '', text)

# 应用到整列
df['description'] = df['description'].apply(strip_html_tags)

或者用lambda函数简化成一行:

df['description'] = df['description'].apply(lambda x: re.sub('<[^<]+?>', '', x) if not pd.isna(x) else x)

验证效果

处理完之后,你可以随便挑个元素看看结果,比如:

print(df['description'][1])

应该就能得到和单个元素处理时一样的纯文本啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:29