【问题标题】:`pandas.DataFrame.to_html()` without `table border` and `tr style``pandas.DataFrame.to_html()` 没有 `table border` 和 `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

【问题讨论】:

    标签: python html pandas


    【解决方案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设置边框。
    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2018-09-16
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多