将 Dataframe 转换为 HTML 时,是不是可以设置列最大宽度

Posted

技术标签:

【中文标题】将 Dataframe 转换为 HTML 时,是不是可以设置列最大宽度【英文标题】:When converting Dataframe to HTML is it possible to set column maximum width将 Dataframe 转换为 HTML 时,是否可以设置列最大宽度 【发布时间】:2021-12-19 19:37:10 【问题描述】:

我的 html 不太好.. 所以也许可以通过使用类来轻松解决这个问题...但是在网上没有找到任何示例...

我想将表格列设置为最大宽度。如果文本单元格大于单元格,则执行分词。

我找到了我需要的示例:

<table border="1" class="dataframe table table-bordered table-striped table-hover fixed">
    <col  />
    <col  />
    <col  />
    <col  />
    <col  />
  <thead>
    <tr>
      <th>Group</th>
      <th>Start Address (decimal)</th>
      <th>Length (decimal)</th>
      <th>Register</th>
      <th>Bits</th>
    </tr>
  </thead>
</table>

等等,正是我想要的..

但我不知道如何使用 panda.to_html 函数获得相同的行为...

有什么提示吗?

谢谢

【问题讨论】:

【参考方案1】:

查看pandas documentation for to_html

有一个选项可以定义列表中的列间距,每列的宽度作为列表中的一个元素:

df.to_html(col_space=[20,30,140,40,40])

编辑: 对此进行更深入的研究,我不确定如何设置您正在寻找的 最大 列宽,但通过替换生成的 html 中的文本来插入 col width 提出了一个黑客解决方法:

.replace('<thead>','<col  />\n<col  />\n<col  />\n<col  />\n<col  />\n<thead>')

完整示例:

df = pd.DataFrame('Group':['Short Text','Longer Text','Really Really Long Text'],
                'Start Address (decimal)':['Short Text','Longer Text','Really Really Long Text'],
                'Length (decimal)':['Short Text','Longer Text','Really Really Long Text'],
                'Register':['Short Text','Longer Text','Really Really Long Text'],
                'Bits':['Short Text','Longer Text','Really Really Long Text'])

html = df.to_html(classes=['table-bordered','table-striped','table-hover fixed'],
                index=False) \
            .replace('<thead>','<col  />\n<col  />\n<col  />\n<col  />\n<col  />\n<thead>')

输出

<table border="1" class="dataframe table-bordered table-striped table-hover fixed">
  <col  />
<col  />
<col  />
<col  />
<col  />
<thead>
    <tr style="text-align: right;">
      <th>Group</th>
      <th>Start Address (decimal)</th>
      <th>Length (decimal)</th>
      <th>Register</th>
      <th>Bits</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Short Text</td>
      <td>Short Text</td>
      <td>Short Text</td>
      <td>Short Text</td>
      <td>Short Text</td>
    </tr>
    <tr>
      <td>Longer Text</td>
      <td>Longer Text</td>
      <td>Longer Text</td>
      <td>Longer Text</td>
      <td>Longer Text</td>
    </tr>
    <tr>
      <td>Really Really Long Text</td>
      <td>Really Really Long Text</td>
      <td>Really Really Long Text</td>
      <td>Really Really Long Text</td>
      <td>Really Really Long Text</td>
    </tr>
  </tbody>
</table>

虽然不理想,但它应该生成接近您在问题中发布的最终结果的 html。

【讨论】:

是的,但这并没有指定最大宽度,而是最小宽度。

以上是关于将 Dataframe 转换为 HTML 时,是不是可以设置列最大宽度的主要内容,如果未能解决你的问题,请参考以下文章

将 Factiva-HTML 转换为 tidy-dataframe 的函数

尝试将 DataFrame 写入羽毛时出错。羽毛是不是支持列表列?

当行尾有多余空格时,将 .dat 文件转换为 DataFrame

Spark Dataframe 是不是对 DB 应用转换?

python将scikit-learn自带数据集转换为pandas dataframe格式

使用 MIMEApplication 将 Pandas Dataframe 转换为电子邮件附件