没有表边框和tr样式的pandas.DataFrame.to_html()

时间:2018-07-21 21:06:44

标签: python html pandas

根据标题,是否可以(如果可以,如何)从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包括在内。

因此,有什么方法可以消除bordertable的{​​{1}}和style的{​​{1}}吗?

1 个答案:

答案 0 :(得分:2)

如您所见,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。