Pandas Dataframes to_html:突出显示表行

Cha*_*lon 19 html python pandas

我正在使用pandas to_html函数创建表,我希望能够突出显示输出表的底行,它具有可变长度.我没有任何关于html的真实经验,我在网上找到的就是这个

<table border="1">
  <tr style="background-color:#FF0000">
    <th>Month</th>
    <th>Savings</th>
  </tr>
  <tr>
    <td>January</td>
    <td>$100</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

所以我知道最后一行必须有<tr style=""background-color:#FF0000">(或者我想要的任何颜色),而不仅仅是<tr>,但我真的不知道怎么做才能让我的表格与我正在制作.我不认为我可以使用to_html函数本身,但是如何在创建表后执行此操作?

任何帮助表示赞赏.

vol*_*myr 21

由于pandas现在具有样式功能,因此您不再需要JavaScript hacks.这是一个纯粹的熊猫解决方案:

import pandas as pd

df = []
df.append(dict(date='2016-04-01', sleep=11.2, calories=2740))
df.append(dict(date='2016-04-02', sleep=7.3, calories=3600))
df.append(dict(date='2016-04-03', sleep=8.3, calories=3500))

df = pd.DataFrame(df)

def highlight_last_row(s):
    return ['background-color: #FF0000' if i==len(s)-1 else '' for i in range(len(s))]

s = df.style.apply(highlight_last_row)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Vik*_*kez 20

你可以使用jQuery在javascript中完成它:

 $('table tbody tr').filter(':last').css('background-color', '#FF0000')
Run Code Online (Sandbox Code Playgroud)

另外,较新版本的pandas dataframe会在表格html中添加一个类,因此您可以使用以下方法过滤掉pandas表:

 $('table.dataframe tbody tr').filter(':last').css('background-color', '#FF0000')
Run Code Online (Sandbox Code Playgroud)

但是如果你愿意,你可以添加自己的类:

df.to_html(classes='my_class')
Run Code Online (Sandbox Code Playgroud)

甚至多个:

df.to_html(classes=['my_class', 'my_other_class'])
Run Code Online (Sandbox Code Playgroud)

如果您使用的是IPython Notebook,那么这是一个完整的工作示例:

In [1]: import numpy as np
        import pandas as pd
        from IPython.display import HTML, Javascript
In [2]: df = pd.DataFrame({'a': np.arange(10), 'b': np.random.randn(10)})
In [3]: HTML(df.to_html(classes='my_class'))
In [4]: Javascript('''$('.my_class tbody tr').filter(':last')
                                             .css('background-color', '#FF0000');
                   ''')
Run Code Online (Sandbox Code Playgroud)

或者您甚至可以使用纯CSS:

In [5]: HTML('''
        <style>
            .df tbody tr:last-child { background-color: #FF0000; }
        </style>
        ''' + df.to_html(classes='df'))
Run Code Online (Sandbox Code Playgroud)

可能性是无止境 :)

编辑:创建一个html文件

import numpy as np
import pandas as pd

HEADER = '''
<html>
    <head>
        <style>
            .df tbody tr:last-child { background-color: #FF0000; }
        </style>
    </head>
    <body>
'''
FOOTER = '''
    </body>
</html>
'''

df = pd.DataFrame({'a': np.arange(10), 'b': np.random.randn(10)})
with open('test.html', 'w') as f:
    f.write(HEADER)
    f.write(df.to_html(classes='df'))
    f.write(FOOTER)
Run Code Online (Sandbox Code Playgroud)

  • 虽然我认为你的答案非常适合那些有HTML/JS/CSS经验的人,但我认为没有HTML经验的人会发现你的解决方案有点压倒性. (8认同)