参数
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_text2 = df_test.to_html(index=False) # 无行索引
边框宽度
html_text3 = df_test.to_html(border=5) # 边框宽度设为 2, 设为 0 则 无边框
对齐方式
# justify='left' 为左对齐, justify='right' 为右对齐
html_text4 = df_test.to_html(index=False, justify='center') # 列标签内容居中对齐
空的显示
html_text5 = df_test.to_html(index=False, na_rep="空") # 自定义空字符表现形式
- 测试可知,
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_text6
的 html
文本,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>
"""
表格标题
title = "测试表格标题"
html_text8 = html_text7.replace('class="dataframe">',
'class="dataframe"><caption>{}</caption>'.format(title)
)
单元格颜色
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>
"""