pandas的df.apply()调用html.unescape()无法解码HTML字符问题求助
pandas DataFrame HTML特殊字符解码apply失效问题解决方案
根本原因
DataFrame.apply()默认传入处理函数的参数是整列的Series对象,不是单个单元格的字符串值。
你之前做x + "TESTSTRING"能正常生效,是因为pandas的字符串加法支持矢量化操作,会自动逐元素执行;但html.unescape()本身只接收单个字符串输入,不支持处理Series对象,因此无法完成解码。添加axis=1参数仅会将入参改为整行的Series对象,本质还是没有传入单个字符串,所以也无效。
可行解决方案
方案1:全表逐元素处理(所有列都需要解码时使用)
使用pandas专门用于逐元素处理的applymap方法:
import html df2 = df.applymap(html.unescape)
方案2:指定单列处理(仅部分列需要解码时使用)
对目标字符串列单独调用Series.apply:
# 假设需要解码的列名为content df['content'] = df['content'].apply(html.unescape)
方案3:更高性能的矢量化处理(pandas 1.3及以上版本支持)
直接使用pandas内置的字符串解码方法,性能比逐元素调用高:
df['content'] = df['content'].str.unescape()
验证示例
import html import pandas as pd # 构造测试数据 df = pd.DataFrame({ 'col1': ["Someting wrong with <b>E&S</b>", "Test <div>"], 'col2': ["Another & test", "Hello world"] }) # 执行解码 df2 = df.applymap(html.unescape) print(df2) # 输出已完成解码,示例输出第一行第一列为:Someting wrong with <b>E&S</b>
内容的提问来源于stack exchange,提问作者June Park
相关产品推荐
相关产品推荐

