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

如何为pandas DataFrame单元格内的部分字符串设置颜色

实现原理

pandas Styler的applymap(高版本pandas已更名为map)方法是给整个单元格节点添加CSS规则,只能控制整格文本的统一样式,无法精准选中单元格内的部分文本,因此原有逻辑会把Name列整段内容全部标红。
要实现单元格内部分文本着色,核心思路是给需要加样式的文本片段单独包裹带内联样式的HTML标签,配置Styler渲染时不转义这些HTML标签即可达到效果。

实现代码
import pandas as pd

def colorize_target_segment(text):
    # 按第一个空格拆分出名字和目标着色的姓氏部分,可根据自身需求修改匹配逻辑
    parts = text.split(maxsplit=1)
    if len(parts) < 2:
        return text
    first_name, last_name = parts
    # 给目标片段套红色样式的span标签
    return f"{first_name} <span style='color: red;'>{last_name}</span>"

# 构造示例数据
data = {
    'Name' : ['Martha BR', 'Bran dffd', 'Rob eqr', 'Georgia fdaf'],
    'Maths' : [87, 91, 97, 95],
    'Science' : [83, 99, 84, 76]
}
df = pd.DataFrame(data)

# 仅对Name列应用自定义文本格式化,关闭HTML转义让内嵌样式生效
styled_df = df.style.format(
    formatter={'Name': colorize_target_segment},
    escape=False
)

# Jupyter环境直接输出styled_df即可看到效果,导出为HTML可使用styled_df.to_html("output.html")
补充说明
  • 该方案仅适用于支持HTML渲染的场景,比如Jupyter类环境、导出HTML文件;如果需要导出带部分着色的Excel文件,需要用openpyxl等库单独操作单元格富文本,该HTML方案不生效。
  • 如果着色目标不是空格后的姓氏,只需要修改colorize_target_segment里的文本匹配逻辑,找到目标片段后包裹对应样式的span标签即可,支持同时给不同片段加不同颜色、字体粗细等样式。
  • 数值列不要套用这类HTML格式化逻辑,否则会破坏数值类型的后续样式计算(比如色阶、数据条、条件格式等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:30:38