Pandas Dataframes to_html:突出显示表行

2024-05-13 21:04:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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>

所以我知道最后一行必须有<tr style=""background-color:#FF0000">(或者我想要的任何颜色),而不是只有<tr>,但是我不知道该怎么做,就是让我正在制作的表发生这种情况。我不认为我可以用to_html函数本身来完成,但是在创建表之后,我如何才能完成呢?

如有任何帮助,我们将不胜感激。


Tags: to函数pandasstylehtmltable经验tr
3条回答

可以使用jQuery在javascript中执行此操作:

 $('table tbody tr').filter(':last').css('background-color', '#FF0000')

此外,较新版本的pandas还向表html添加了一个类dataframe,这样您就可以使用以下命令筛选出pandas表:

 $('table.dataframe tbody tr').filter(':last').css('background-color', '#FF0000')

但是,如果需要,可以添加自己的类:

df.to_html(classes='my_class')

甚至多重:

df.to_html(classes=['my_class', 'my_other_class'])

如果您使用的是IPython笔记本,下面是完整的工作示例:

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');
                   ''')

或者你甚至可以使用普通的CSS:

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

可能性是无穷的:)

编辑:创建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)

我无法让@Viktor的“完整工作示例”在ipython(jupyter)中工作,因为最后一行是要呈现的内容,但是在Javascript行之后移动HTML呈现对我来说不起作用。

“普通CSS”示例确实有效,我们甚至可以在其中放入Javascript <script>。这允许我使用https://github.com/christianbach/tablesorter呈现可排序的Pandas数据帧。

下面是一个完整的例子:

df = pd.DataFrame({'a': np.arange(10), 'b': np.random.randn(10)})
from IPython.display import HTML, Javascript
HTML('''<script src='./tablesort/tablesort.min.js'></script>
<script src='./tablesort/src/sorts/tablesort.number.js'></script>
<script>
new Tablesort(document.getElementById('sort'));
</script>
'''+ df.to_html(classes ='sort" id = "sort'))

注意,.js文件是本地的。直接引用github原始代码将不起作用,因为MIME类型是plain/txt。

更新:我刚刚注意到Pandas v0.17.1发布了一个功能到add style to the DataFrame HTML output

因为pandas现在已经有了样式功能,所以您不再需要JavaScript黑客了。 这是纯熊猫解决方案:

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)

enter image description here

相关问题 更多 >