Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧转换为html:高亮显示表行_Python_Html_Pandas - Fatal编程技术网

Python 将数据帧转换为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> <

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

月
储蓄
一月
$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>