`pandas.DataFrame.to_html()` 没有 `table border` 和 `tr style`
Posted
技术标签:
【中文标题】`pandas.DataFrame.to_html()` 没有 `table border` 和 `tr style`【英文标题】:`pandas.DataFrame.to_html()` without `table border` and `tr style` 【发布时间】:2018-12-29 19:16:19 【问题描述】:根据标题,是否有可能——如果可以,如何——从pandas.DataFrame.to_html()
生成“干净”的 HTML 代码?
我发现 border=...
和 justify=...
参数控制在那里显示的内容,但显然无论你在那里输入什么值,你似乎总是能得到它们。
这是一个最小的工作示例:
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.arange(3 * 4).reshape(3, 4))
df.to_html(border=0, justify='inherit')
产生:
<table border="0" class="dataframe">
<thead>
<tr style="text-align: inherit;">
...
但是,我一直期待:
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.arange(3 * 4).reshape(3, 4))
df.to_html(classes=None, border=None, justify=None)
会/应该产生:
<table class="dataframe">
<thead>
<tr>
...
代替:
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
...
由于引入border
和style
都是外观而不是结构标签,应该通过css
包含。
那么,有什么办法可以从table
中删除border
和tr
中的style
thead
?
【问题讨论】:
【参考方案1】:正如您已经观察到的,df.to_html(classes=None, border=None, justify=None)
忽略了None
的设置,无论如何都会插入默认值。有修改此请求的公开请求,但尚未到位。就目前而言,删除这些硬编码样式的唯一方法是操作输出字符串,如下所示:
html = re.sub(r'<tr.*>', '<tr>', df.to_html().replace('border="1" ', ''))
删除class="dataframe"
可以通过相同的方式完成,但如果保留,这不会影响大多数 CSS。
【讨论】:
这将回答这个问题:如何修改df.to_html()
的输出,而不是如何使df.to_html()
产生正确 输出。我只对后者感兴趣。
df.to_html()
不允许您生成正确的输出。删除这些元素的唯一方法是在生成输出后删除它们。
并非所有问题都有我们喜欢的答案:-)
@norok2 打开了相应的问题:github.com/pandas-dev/pandas/issues/22692
不,不会去掉属性,只设置为0。由于标签中的样式属性有优先权,还是不能用css设置边框。以上是关于`pandas.DataFrame.to_html()` 没有 `table border` 和 `tr style`的主要内容,如果未能解决你的问题,请参考以下文章