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

如何为pandas DataFrame中匹配指定字符串的单元格添加颜色样式

问题原因梳理
  • 列名匹配错误:你的DataFrame只有Visitor、Home两列存储球队名,样式函数却只作用于不存在的Visitor vs Home列,自然不会生效
  • 匹配逻辑错误:你需要匹配的是包含球队前缀的单元格值,直接用map做全等匹配会漏掉所有带额外内容的单元格(比如TOR Maple Leafs这类完整队名)
  • 样式导出逻辑错误:调用df1.style.apply(styler)只是生成了样式对象,你还是用了原生DataFrame的to_html导出,样式完全没有被写入输出文件
  • 函数语法错误:你贴的样式函数第一行定义有多余缩进,运行会直接抛出语法错误
可行解决方案

调整样式逻辑后直接通过样式对象导出HTML即可,完整可运行代码如下:

import pandas as pd

# 原有过滤逻辑保持不变
df1 = df1[(
    df1['Visitor'].str.contains('^TOR|^MTL|^CGY|^WPG|^VAN|^EDM|^OTT', na=False)
) | (df1['Home'].str.contains('^TOR|^MTL|^CGY|^WPG|^VAN|^EDM|^OTT', na=False))]
df1.fillna('', inplace=True)

# 优化后的样式函数
def styler(col):
    # 仅对存储球队名的两列生效
    if col.name not in ['Visitor', 'Home']:
        return [''] * len(col)
    # 统一维护球队和对应背景色映射
    team_color_map = {
        'TOR': 'blue',
        'MTL': 'red',
        'VAN': 'green',
        'CGY': 'orange',
        'WPG': 'navy',
        'EDM': 'gold',
        'OTT': 'purple'
    }
    # 按前缀匹配获取对应背景色
    style_list = []
    for cell_value in col:
        bg_color = ''
        for team_prefix, color in team_color_map.items():
            if cell_value.startswith(team_prefix):
                bg_color = f'background-color: {color};'
                break
        style_list.append(bg_color)
    return style_list

# 生成带样式的HTML并导出文件
styled_html = df1.style.apply(styler).to_html(index=False)
with open('schedule.html', 'w', encoding='utf-8') as f:
    f.write(styled_html)
可选优化建议
  • 如果需要只高亮球队代码部分而非整个单元格,可以用Styler.format配合<span>标签实现局部高亮
  • 如果导出的HTML需要适配多端显示,可以额外写入通用表格CSS样式,优化排版效果
  • 可以把球队前缀列表提为全局变量,统一维护过滤和样式逻辑,避免两边配置不一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:45:03