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

如何在Python终端中按条件为DataFrame单元格着色

如何在Python终端中按条件为DataFrame单元格着色

嘿,这个需求我之前也碰到过!要在Python终端里给DataFrame中符合Age > Num条件的Name单元格上色,咱们可以用ANSI颜色转义序列或者colorama库来实现,下面给你两种实用的方案:

方案一:直接用ANSI颜色转义序列(轻量无依赖)

这种方法不需要额外安装库,类Unix系统(Linux、macOS)的终端原生支持,Windows 10+的终端也能正常识别。核心思路是给符合条件的Name单元格加上颜色转义码,打印时终端就会渲染出颜色。

import pandas as pd

data = {
    "Name": ['Alice','Bob', 'Sue','Joe','rose','cindy'],
    "Age": [11, 6, 3, 16, 21, 8],
    "Num": [2, 17, 12, 7, 22, 9],
    "Score": [3, 8, 13, 18, 3, 23],
    "Dep": [4, 19, 8, 11, 6, 20],
}

df = pd.DataFrame(data)

# 定义ANSI颜色转义码,这里用红色,你可以换成其他颜色
RED = '\033[91m'
# 重置颜色的转义码,必须加,不然后续文本会一直保持红色
RESET = '\033[0m'

# 复制原DataFrame,避免修改原始数据
styled_df = df.copy()
# 逐行判断:如果Age > Num,就给Name字段套上红色代码
styled_df['Name'] = df.apply(
    lambda row: f"{RED}{row['Name']}{RESET}" if row['Age'] > row['Num'] else row['Name'],
    axis=1
)

# 打印处理后的DataFrame
print(styled_df)

运行这段代码后,终端里满足Age > Num的Name单元格就会显示红色啦!要是想换其他颜色,比如绿色是\033[92m、黄色是\033[93m,直接替换RED的值就行。

方案二:用colorama库(跨平台更稳妥)

如果你的终端对ANSI码支持不好(比如旧版本Windows终端),可以用colorama库来做跨平台兼容,它会自动处理不同系统的颜色渲染问题。

首先先安装库:

pip install colorama

然后用下面的代码:

import pandas as pd
from colorama import init, Fore, Style

# 初始化colorama,autoreset=True会自动重置颜色,避免手动加重置码
init(autoreset=True)

data = {
    "Name": ['Alice','Bob', 'Sue','Joe','rose','cindy'],
    "Age": [11, 6, 3, 16, 21, 8],
    "Num": [2, 17, 12, 7, 22, 9],
    "Score": [3, 8, 13, 18, 3, 23],
    "Dep": [4, 19, 8, 11, 6, 20],
}

df = pd.DataFrame(data)

styled_df = df.copy()
# 同样的逻辑,用colorama的Fore.RED来指定红色
styled_df['Name'] = df.apply(
    lambda row: f"{Fore.RED}{row['Name']}" if row['Age'] > row['Num'] else row['Name'],
    axis=1
)

print(styled_df)

这里init(autoreset=True)帮我们自动处理了颜色重置,所以不用手动加Style.RESET_ALL也可以,当然你要是想更稳妥,也可以像方案一那样在结尾加上{Style.RESET_ALL}。

备注:内容来源于stack exchange,提问作者Niiteesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:43:05