如何在Pandas DataFrame列中为特定文本(非整列)着色?
如何在Pandas DataFrame中为特定文本着色(而非整个单元格)
你的现有代码会将包含目标单词的整个单元格设为蓝色,要实现仅高亮特定单词,需要分两种场景处理:Jupyter Notebook中的显示,以及导出到Excel文件。
场景1:在Jupyter Notebook中高亮特定文本
通过将目标单词用HTML标签包裹,并让Pandas Styler渲染HTML内容,就能实现局部文本着色:
import pandas as pd # 创建示例DataFrame data = { 'sentence': [ 'sample sentence.', 'sample sentence 2', 'tewxt text text', ] } df = pd.DataFrame(data) # 定义函数:将"sample"单词用蓝色HTML标签包裹 def highlight_specific_word(text): target_word = 'sample' if target_word in text: return text.replace(target_word, f'<span style="color:blue;font-weight:bold;">{target_word}</span>') return text # 应用格式化,关闭HTML转义以生效 df_styled = df.style.format(highlight_specific_word, subset=['sentence']).set_properties(**{'text-align': 'left'}) # 显示结果 df_styled
这段代码会把每个单元格里的"sample"单词单独染成蓝色(额外添加了加粗效果增强辨识度),其他文本保持默认样式。
场景2:导出到Excel时高亮特定文本
Excel不支持HTML格式,需要借助openpyxl库的富文本(RichText)功能来实现局部着色:
import pandas as pd from openpyxl import Workbook from openpyxl.styles import Font from openpyxl.utils.dataframe import dataframe_to_rows from openpyxl.cell.text import InlinePattern # 创建示例DataFrame data = { 'sentence': [ 'sample sentence.', 'sample sentence 2', 'tewxt text text', ] } df = pd.DataFrame(data) # 创建Excel工作簿和工作表 wb = Workbook() ws = wb.active # 将DataFrame内容写入工作表(先写表头) for r in dataframe_to_rows(df, index=False, header=True): ws.append(r) # 定义蓝色字体样式 blue_font = Font(color="0000FF") # 遍历目标列(这里是第1列,表头为第1行,数据从第2行开始) for row in ws.iter_rows(min_row=2, min_col=1, max_col=1): cell = row[0] text = cell.value if not text: continue target_word = 'sample' # 拆分文本,构建富文本内容 parts = text.split(target_word) rich_text = [] for i, part in enumerate(parts): if part: rich_text.append(part) if i < len(parts)-1: # 添加带蓝色字体的目标单词 rich_text.append(InlinePattern(target_word, font=blue_font)) # 设置单元格的富文本值 cell.value = rich_text # 保存Excel文件 wb.save('output_highlighted.xlsx')
这段代码会在导出的Excel文件中,仅将"sample"单词染成蓝色,其余文本保持默认样式。
内容的提问来源于stack exchange,提问作者Menachem Sperka
相关产品推荐
相关产品推荐

