`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;">
    ...

由于引入borderstyle都是外观而不是结构标签,应该通过css包含。

那么,有什么办法可以从table 中删除bordertr 中的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`的主要内容,如果未能解决你的问题,请参考以下文章