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

如何在Pandas中为包含指定字符串的列单元格设置样式?

解决Pandas DataFrame特定列包含指定字符串的单元格着色问题

问题分析

你当前的代码存在三个核心问题:

  1. 正则匹配判断错误:re.search()返回的是匹配对象(Match)或None,而非布尔值True/False,因此match_b == True这类判断永远不会成立。
  2. 单词边界限制过严:正则中的\b是单词边界匹配,仅会匹配独立的ball或car单词(比如单独的ball),但无法匹配beachball、racecar这类包含子串的情况。
  3. 样式调用方式错误:df.applymap()返回的是普通DataFrame,而非带样式的对象,应该使用df.style.applymap()来设置单元格样式,且subset参数需传入列名列表。

修正方案

方案一:直接用字符串包含判断(简单直观)

不需要正则,直接判断字符串中是否包含目标子串,代码更简洁:

def color_code(value):
    if 'ball' in value:
        return 'background-color: red'
    elif 'car' in value:
        return 'background-color: yellow'
    # 不满足条件时返回空字符串,保持默认样式
    return ''

# 对Interest列应用样式
styled_df = df.style.applymap(color_code, subset=['Interest'])
# 显示带样式的DataFrame
styled_df

方案二:调整正则与判断逻辑(适合复杂匹配场景)

如果需要用正则实现更灵活的匹配(比如忽略大小写等),可以调整正则并修正判断逻辑:

import re

def color_code(value):
    # 去掉单词边界,匹配任意位置的ball或car
    match_b = re.search(r'ball', value)
    match_c = re.search(r'car', value)
    # 直接判断是否匹配到(非None即为匹配成功)
    if match_b:
        return 'background-color: red'
    elif match_c:
        return 'background-color: yellow'
    return ''

styled_df = df.style.applymap(color_code, subset=['Interest'])
styled_df

效果验证

针对你提供的Interest列数据,两种方案都会实现:

  • 所有包含ball的单元格(ball、beachball、volley ball、base-ball)被标红
  • 所有包含car的单元格(racecar、bumper-car、car、nascar、remote car)被标黄

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:50:22