如何匹配两个DataFrame的值,高亮含分号分隔数据的DataFrame并生成HTML?
解决方案
步骤说明
- 提取匹配关键词:从df1中拆分所有分号分隔的文本,去重后存入集合,实现高效匹配。
- 定义高亮逻辑:遍历df2每个单元格的内容,拆分后检查每个项是否在匹配集合中,匹配项用黄色背景的HTML标签包裹。
- 生成高亮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
相关产品推荐
相关产品推荐

