DataFrame.to_html()详解 将数据框 DataFrame 转为 html 表格

参数

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)

"""

      ...
      ...
      ...
    
"""

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

html_text7 = html_text6.replace('class', 'cellspacing=\"0\" class')
print(html_text7)

"""

      ...
      ...
      ...
    
"""
html_text7

表格标题

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

单元格颜色

print(html_text8)
"""
测试表格标题
col_a col_b col_c col_d
0 AAAAAAAAAAAAAAAA 1.22288 1 None
1 HHHH 2.55566 NaN {'idx_1': 'dark', 'idx_2': 'light'}
"""

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

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

import re

def Godsaycolor(df, html_text, idx_row, idx_col):
    td_text = re.findall("(.*?)", html_text)
    text = td_text[(idx_row) * df.shape[1] + idx_col]
    html_text_fin = html_text.replace('' + text,
        '' + 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)

"""
测试表格标题
col_a col_b col_c col_d
0 AAAAAAAAAAAAAAAA 1.22288 1 None
1 HHHH 2.55566 NaN {'idx_1': 'dark', 'idx_2': 'light'}
"""
html_text10

参考资料

  1. pandas 官方文档

你可能感兴趣的:(DataFrame.to_html()详解 将数据框 DataFrame 转为 html 表格)