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

如何匹配两个DataFrame的值,高亮含分号分隔数据的DataFrame并生成HTML?

解决方案

步骤说明

  1. 提取匹配关键词:从df1中拆分所有分号分隔的文本,去重后存入集合,实现高效匹配。
  2. 定义高亮逻辑:遍历df2每个单元格的内容,拆分后检查每个项是否在匹配集合中,匹配项用黄色背景的HTML标签包裹。
  3. 生成高亮HTML:用pandas的Styler工具将高亮逻辑应用到df2,导出为可直接查看的HTML文件。

完整代码

import pandas as pd

# 读取两个数据文件
df1 = pd.read_excel("Excel.xlsx")
df2 = pd.read_csv("Test.csv")

# 从df1提取所有待匹配的关键词(处理分号分隔、去空、去重)
match_terms = set()
for column in df1.columns:
    for cell_content in df1[column].dropna().astype(str):
        # 拆分分号,去除首尾空格,过滤空字符串
        split_terms = [term.strip() for term in cell_content.split(';') if term.strip()]
        match_terms.update(split_terms)

# 定义高亮匹配内容的函数
def highlight_matched_text(cell_text):
    # 处理空值单元格
    if pd.isna(cell_text):
        return ""
    cell_str = str(cell_text)
    split_items = [item.strip() for item in cell_str.split(';')]
    # 对每个项进行高亮处理
    processed_items = []
    for item in split_items:
        if item in match_terms:
            processed_items.append(f'<span style="background-color: yellow">{item}</span>')
        else:
            processed_items.append(item)
    # 重新拼接成原始格式的字符串
    return '; '.join(processed_items)

# 对df2应用高亮样式
styled_df = df2.style.applymap(highlight_matched_text)
# 导出为HTML(escape=False确保HTML标签不被转义)
styled_df.to_html("highlighted_result.html", escape=False)

关键注意点

  • 空值处理:避免因单元格为空导致的拆分或匹配报错
  • 关键词去重:用set存储匹配项,减少重复匹配,提升效率
  • escape=False:必须设置该参数,否则pandas会把HTML标签转义为纯文本,高亮效果无法显示
  • 空格处理:拆分时去除每个项的首尾空格,避免因空格导致匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:18:30