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

如何在Pandas DataFrame渲染HTML时显示趋势箭头?

问题:Pandas Styler渲染HTML时保留自定义趋势箭头不被转义

首先,你的DataFrame定义如下:

import pandas as pd

df = pd.DataFrame([
    [54, 21, 30, 12, '20-01-2002'],
    [52, 26, 31, 2, '22-01-2002'],
    [50, 16, 11, 15, '223-01-2002']
], columns=['A', 'B', 'C', 'D', 'date']).transpose()

需求是:渲染为HTML时,对比第二列(列1)的值,在第一列(列0)显示向上/向下的趋势箭头。

你之前尝试直接在DataFrame中拼接HTML span标签,但Styler会自动转义标签导致显示为纯文本,调整escape参数也无法解决符号转义问题。正确的做法是通过Styler的自定义函数生成带箭头的HTML内容,而非直接在DataFrame中存储标签。

解决方案

  1. 定义一个函数,根据每行第一列与第二列的数值对比,返回包含箭头的HTML字符串:
def add_trend_arrow(row):
    # 跳过date行,直接返回原文本
    if row.name == 'date':
        return str(row[0])
    # 提取第一列和第二列的数值
    val_first = row[0]
    val_second = row[1]
    # 根据数值对比生成带箭头的HTML
    if val_first > val_second:
        return f"{val_first} <span style='color:green'>&#x25B2;</span>"
    elif val_first < val_second:
        return f"{val_first} <span style='color:red'>&#x25BC;</span>"
    else:
        return str(val_first)
  1. 使用Styler的apply方法,将函数应用到每行的第一列,然后生成HTML时关闭转义:
# 应用自定义样式函数
styled = df.style.apply(
    lambda row: [add_trend_arrow(row) if col_idx == 0 else str(row[col_idx]) for col_idx in range(len(row))],
    axis=1
)

# 导出为HTML,设置escape=False阻止标签转义
html_output = styled.to_html(escape=False)

这样生成的HTML会正确渲染彩色箭头,第一列的数值会根据第二列的对比结果显示对应的趋势箭头,不会出现标签转义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:35:38