Python 将数据帧转换为html:高亮显示表行
我正在使用pandas to_html函数创建表,我希望能够突出显示输出表的底行,它的长度是可变的。我没有任何真正的html经验可言,我在网上找到的只是这个Python 将数据帧转换为html:高亮显示表行,python,html,pandas,Python,Html,Pandas,我正在使用pandas to_html函数创建表,我希望能够突出显示输出表的底行,它的长度是可变的。我没有任何真正的html经验可言,我在网上找到的只是这个 <table border="1"> <tr style="background-color:#FF0000"> <th>Month</th> <th>Savings</th> </tr> <tr> <
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
月
储蓄
一月
$100
因此,我知道最后一行必须有
,您可以使用jQuery在javascript中执行此操作:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
$('table tbody tr').filter(':last').css('background-color', '#FF0000')
此外,较新版本的pandas在表格html中添加了一个类dataframe
,因此您可以使用以下方法筛选出pandas表格:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
$('table.dataframe tbody tr').filter(':last').css('background-color', '#FF0000')
但如果需要,您可以添加自己的类:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
df.to_html(classes='my_class')
甚至多个:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
df.to_html(classes=['my_class', 'my_other_class'])
如果您正在使用IPython笔记本,以下是完整的工作示例:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
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:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
In [5]: HTML('''
<style>
.df tbody tr:last-child { background-color: #FF0000; }
</style>
''' + df.to_html(classes='df'))
[5]中的:HTML(“”)
.df tbody tr:last child{背景色:#FF0000;}
'''+df.to_html(class='df'))
可能性是无穷的:)
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
编辑:创建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>
将numpy导入为np
作为pd进口熊猫
标题=“”
.df tbody tr:last child{背景色:#FF0000;}
'''
页脚=“”
'''
df=pd.DataFrame({'a':np.arange(10),'b':np.random.randn(10)})
将open('test.html','w')作为f:
f、 写入(标题)
f、 写入(df.to_html(class='df'))
f、 写入(页脚)
我无法让@Viktor的“完整工作示例”在ipython(jupyter)中工作,因为最后一行是渲染的内容,但是在Javascript行之后移动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>
“纯CSS”示例确实有效,我们甚至可以在其中放入Javascript
。这允许我使用渲染可排序的数据帧
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
以下是一个完整的示例:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
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'))
df=pd.DataFrame({'a':np.arange(10),'b':np.random.randn(10)})
从IPython.display导入HTML、Javascript
HTML(“”)
新的表排序(document.getElementById('sort');
'''+df.to_html(class='sort“id=”sort'))
请注意,.js文件是本地文件。直接引用github原始代码将不起作用,因为MIME类型是plain/txt
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
更新:我刚刚注意到Pandas v0.17.1版向发布了一个功能。因为Pandas现在有了样式化功能,所以您不再需要JavaScript攻击。
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
这是一个纯粹的解决方案:
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
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)
虽然我认为你的答案对于有HTML/JS/CSS经验的人来说是非常好的,但我认为没有HTML经验的人会发现你的解决方案有点难以接受。只是有点。。。我不明白在这里创建类是做什么的。我正在使用python 2.7.5(以及python(x,y)包中的所有包),并从命令提示符运行文件。我在IPython中运行了你的示例并得到了,我不确定该如何理解。不过,感谢您的全面回复@Viktor您是否在ipython、ipython qtconsole或ipython笔记本的shell版本中运行代码?你到底想做什么?你不能在命令提示符下突出显示html输出,它只是原始文本。。。qtconsole只能解析有限的html和css子集,因此最后一个子项
选择器无法在其中工作。您必须使用ipython笔记本才能完全操作html输出。添加了更新的示例,从数据框创建html文件,并添加了样式。当我们在浏览器(Web应用的客户端)上显示它时,这是否有效?此外,当我们向最终用户显示时,是否可以删除最左边列上的0、1、2等。谢谢您可以使用df.to\u html(index=False)
。
<table border="1">
<tr style="background-color:#FF0000">
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>