美文网首页pythonai
DataFrame.to_html()详解 将数据框 DataF

DataFrame.to_html()详解 将数据框 DataF

作者: Simple丶Plan | 来源:发表于2019-12-24 11:22 被阅读0次

    参数

    DataFrame.to_html(buf=None, columns=None, col_space=None, header=True, index=True,na_rep='NaN',
        formatters=None, float_format=None, sparsify=None, index_names=True,justify=None,
        bold_rows=True,classes=None, escape=True, max_rows=None, max_cols=None,show_dimensions=False,
        notebook=False, decimal='.', border=None)
    
    buf : StringIO-like, 可选
        写入缓冲区。
    columns : sequence,可选
        要转化的列的列名;默认值 None 为所有列转化。
    col_space : int,可选
        每列的最小宽度。
    header : bool,可选
        是否打印列标签,默认为 True。
    index : 布尔值,可选
        是否打印索引(行)标签,默认为 True。
    na_rep : 字符串,可选
        指定 NAN 的字符串表示形式,默认为 'NaN'。
    formatters : 多个单参数函数组成的列表或字典,可选
        格式化程序可按列表的所索引或字典的键名称应用于列元素,默认为 None。
        每个单参数函数的结果必须是一个 unicode 字符串。列表的长度必须等于列数。
    float_format: 单参数函数,可选
        用于将列元素设置为浮点数的格式化程序功能,默认为无。
        此单参数函数的结果必须是 unicode 字符串。
    sparsify : bool,可选
        默认为 True。输入 False 时,对于具有层次结构索引的 DataFrame,会在每一行打印多重索引。
    index_names : bool,可选
        打印索引名称,默认为 True。
    line_width : int,可选
        换行符的宽度,默认为不换行。
    justify : 列标签对齐方式, 可选
        左右对齐列标签。默认为 None时,使用打印配置中的选项(由 set_option 控制),则右对齐。
    bold_rows : bool, 可选
        对横向表格线进行加粗。
    classes : CSS类(es)适用于生成的html表, 可选
        默认 None
    escape : bool, 可选
        将 "<", ">", "&" 转化成 html 安全序列(??),默认 True。
    max_rows : int, 可选
        显示最大行数。
    max_cols : int, 可选
        显示最大列数。
    decimal : str, 可选
        小数分隔符, 默认为 '.'。
    border : int, 可选
        表格外边框宽度,默认为 1,参数为 0 时表格无边框。数值越大外边框越宽。
    

    示例

    默认格式

    data = [{"col_a":"AAAAAAAAAAAAAAAA", "col_b":"1.22288", "col_c":"1", "col_d":None},
            {"col_a":"HHHH", "col_b":"2.55566", "col_c":np.nan, "col_d":{
                "idx_1":"dark", "idx_2":"light"}
            }]
    df_test = pd.DataFrame(data)
    html_text = df_test.to_html()
    
    html_text

    行索引

    html_text2 = df_test.to_html(index=False)  # 无行索引
    
    html_text2

    边框宽度

    html_text3 = df_test.to_html(border=5)  # 边框宽度设为 2, 设为 0 则 无边框
    
    html_text3

    对齐方式

    # justify='left' 为左对齐, justify='right' 为右对齐
    html_text4 = df_test.to_html(index=False, justify='center')  # 列标签内容居中对齐
    
    html_text4

    空的显示

    html_text5 = df_test.to_html(index=False, na_rep="空")  # 自定义空字符表现形式
    
    html_text5
    • 测试可知,na_rep 参数设定对 None 不起作用。

    边框线实心

    html_text6 = df_test.to_html()
    print(html_text6)
    
    """
    <table border="1" class="dataframe">
      <thead>
        <tr style="text-align: right;">
          ...
          ...
          ...
        </tr>
      </tbody>
    </table>
    """
    

    to_html() 我没有找到让边框线变实心的功能。但我们可以用尝试改造 html 文本。我们看下 html_text6html 文本,html 表格的属性存放在 table 标签中,我们可以在 class 前面插入边框线实心的参数。

    html_text7 = html_text6.replace('class', 'cellspacing=\"0\" class')
    print(html_text7)
    
    """
    <table border="1" cellspacing="0" class="dataframe">
      <thead>
        <tr style="text-align: right;">
          ...
          ...
          ...
        </tr>
      </tbody>
    </table>
    """
    
    html_text7

    表格标题

    title = "测试表格标题"
    html_text8 = html_text7.replace('class="dataframe">',
                                    'class="dataframe"><caption>{}</caption>'.format(title)
                                    )
    
    html_text8

    单元格颜色

    print(html_text8)
    """
    <table border="1" class="dataframe"><caption>测试表格标题</caption>
      <thead>
        <tr style="text-align: right;">
          <th></th>
          <th>col_a</th>
          <th>col_b</th>
          <th>col_c</th>
          <th>col_d</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>AAAAAAAAAAAAAAAA</td>
          <td>1.22288</td>
          <td>1</td>
          <td>None</td>
        </tr>
        <tr>
          <th>1</th>
          <td>HHHH</td>
          <td>2.55566</td>
          <td>NaN</td>
          <td>{'idx_1': 'dark', 'idx_2': 'light'}</td>
        </tr>
      </tbody>
    </table>
    """
    

    每一个 <td> 标签都代表一个单元格,在 <td> 中的 td 后添加 bgcolor="#ffcc00" ,即可给
    单元格赋予颜色。#ffcc00 表示黄色。

    我们可以写个函数指定某个单元格赋予颜色。

    import re
    
    def Godsaycolor(df, html_text, idx_row, idx_col):
        td_text = re.findall("<td>(.*?)</td>", html_text)
        text = td_text[(idx_row) * df.shape[1] + idx_col]
        html_text_fin = html_text.replace('<td>' + text,
            '<td bgcolor="#ffcc00">' + text)
        return html_text_fin
    
    html_text9 = Godsaycolor(df_test, html_text8, 0, 3)
    html_text10 = Godsaycolor(df_test, html_text9, 1, 0)
    
    print(html_text10)
    
    """
    <table border="1" class="dataframe"><caption>测试表格标题</caption>
      <thead>
        <tr style="text-align: right;">
          <th></th>
          <th>col_a</th>
          <th>col_b</th>
          <th>col_c</th>
          <th>col_d</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>AAAAAAAAAAAAAAAA</td>
          <td>1.22288</td>
          <td>1</td>
          <td bgcolor="#ffcc00">None</td>
        </tr>
        <tr>
          <th>1</th>
          <td bgcolor="#ffcc00">HHHH</td>
          <td>2.55566</td>
          <td>NaN</td>
          <td>{'idx_1': 'dark', 'idx_2': 'light'}</td>
        </tr>
      </tbody>
    </table>
    """
    
    html_text10

    参考资料

    1. pandas 官方文档

    相关文章

      网友评论

        本文标题:DataFrame.to_html()详解 将数据框 DataF

        本文链接:https://www.haomeiwen.com/subject/igjznctx.html