将多种样式应用于 pandas 中的单元格

发布于 2025-01-10 22:07:03 字数 799 浏览 0 评论 0原文

所以,基本上我想将样式应用到单元格并渲染到 html。

这就是我到目前为止所做的:

import pandas as pd
import numpy as np
data = [dict(order='J23-X23', num=5, name='foo', value='YES'),
            dict(order='Y23-X24', num=-4, name='bar', value='NO'),
            dict(order='J24-X24', num=6, name='baz', value='NO'),
            dict(order='X25-X24', num=-2, name='foobar', value='YES')]
df = pd.DataFrame(data)

def condformat(row):
    cellBGColor = 'green' if row.value == 'YES' else 'blue'
    color = 'background-color: {}'.format(cellBGColor)
    return (color, color, color, color)

s = df.style.apply(condformat, axis=1)
with open('c:/temp/test.html', 'w') as f:
   f.write(s.render())

我的问题有两个: (1) 我使用的渲染正确吗?或者有更好的方法来做到这一点吗?就像 to_html 给我什么? (2) 如果我必须添加另一种样式,例如以红色格式 (35) 制作 -ve 数字怎么办?

So, basically I want to apply styles to cell and render to html.

This is what I have done so far:

import pandas as pd
import numpy as np
data = [dict(order='J23-X23', num=5, name='foo', value='YES'),
            dict(order='Y23-X24', num=-4, name='bar', value='NO'),
            dict(order='J24-X24', num=6, name='baz', value='NO'),
            dict(order='X25-X24', num=-2, name='foobar', value='YES')]
df = pd.DataFrame(data)

def condformat(row):
    cellBGColor = 'green' if row.value == 'YES' else 'blue'
    color = 'background-color: {}'.format(cellBGColor)
    return (color, color, color, color)

s = df.style.apply(condformat, axis=1)
with open('c:/temp/test.html', 'w') as f:
   f.write(s.render())

My problem is two fold:
(1) Am I using the right rendering? Or is there a better way to do this? As in what does to_html give me?
(2) What if I have to add another style, say make -ve numbers in the format (35) in red color?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

々眼睛长脚气 2025-01-17 22:07:03

因此,在与试错作斗争之后:

s = df.style.apply(condformat, axis=1).applymap(dataframe_negative_coloring)

使用一种新方法:

def dataframe_negative_coloring(value):
    ''' Colors Dataframe rows with alternate colors.'''
    color = 'red' if value < 0 else 'black'
    return 'color: %s' % color

任何纯粹主义者,如果我可以做得更好,请随时提出建议

So, after battling with trial-error:

s = df.style.apply(condformat, axis=1).applymap(dataframe_negative_coloring)

with a new method:

def dataframe_negative_coloring(value):
    ''' Colors Dataframe rows with alternate colors.'''
    color = 'red' if value < 0 else 'black'
    return 'color: %s' % color

Any purists out there, feel free to advice if I can make this better

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文