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)

"""
<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 官方文档
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342