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

如何移除DataFrame列中的HTML格式并转换为纯文本?

解决DataFrame列移除HTML标签的问题

核心错误分析

你的代码存在两个关键问题:

  • apply方法使用错误:df['col'].apply(cleanhtml(df['col'])) 是把函数调用的结果(整个Series对象)传给了apply,但apply需要传入的是函数本身,而非函数执行后的结果。
  • 拼写错误:re.complile 应为 re.compile;return cleartext 应为 return cleantext,这些笔误会直接触发语法或命名错误。

修正后的基础版本代码

import re
# 修正正则编译的拼写错误
CLEANR = re.compile('<.*?>')

def cleanhtml(raw_html):
    # 统一转换为字符串,处理非字符串类型或空值
    cleantext = re.sub(CLEANR, '', str(raw_html))
    # 修正返回变量名的拼写错误
    return cleantext

# 正确使用apply:直接传入函数名,apply会自动遍历列的每个元素传入函数
df['col'] = df['col'].apply(cleanhtml)

更可靠的替代方案(推荐)

正则表达式处理HTML标签容易遗漏嵌套标签、HTML实体等特殊情况,建议使用BeautifulSoup库解析HTML,结果更准确:

from bs4 import BeautifulSoup
import pandas as pd

def cleanhtml(raw_html):
    # 处理空值,避免传入None导致报错
    if pd.isna(raw_html):
        return ''
    # 使用BeautifulSoup提取纯文本,strip=True去除首尾空白
    soup = BeautifulSoup(str(raw_html), "html.parser")
    return soup.get_text(strip=True)

# 应用到DataFrame目标列
df['col'] = df['col'].apply(cleanhtml)

额外优化:批量处理多列

如果需要同时处理多个列,可以使用applymap方法:

# 对指定多列批量应用清洗函数
df[['col1', 'col2', 'col3']] = df[['col1', 'col2', 'col3']].applymap(cleanhtml)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:02:31