我正在使用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函数本身,但是如何在创建表之后执行此操作?
感谢任何帮助。
答案 0 :(得分: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)
答案 1 :(得分:19)
你可以使用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 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');
''')
或者您甚至可以使用纯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)
答案 2 :(得分:4)
我无法获得@ Viktor&#34;完整的工作示例&#34;在ipython(jupyter)中工作,因为最后一行是渲染的,但在Javascript行之后移动HTML渲染对我来说不起作用。
&#34;普通CSS&#34;示例确实有效,我们甚至可以在其中放置Javascript 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'))
。这允许我使用https://github.com/christianbach/tablesorter呈现可排序的Pandas数据帧。
以下是一个完整的例子:
socket.async_read_some(buffer, yield);
请注意.js文件是本地的。直接引用github原始代码将不起作用,因为MIME类型是plain / txt。
更新:我刚注意到Pandas v0.17.1向add style to the DataFrame HTML output发布了一项功能。