【发布时间】:2020-04-24 06:31:09
【问题描述】:
我创建一个数据框并导出到一个 html 表。但是标题如下所示
如何合并索引名行和列名行?
我希望表格标题看起来像这样:
但它目前像这样导出到 html:
我创建如下数据框(示例):
data = [{'Name': 'A', 'status': 'ok', 'host': '1', 'time1': '2020-01-06 06:31:06', 'time2': '2020-02-06 21:10:00'}, {'Name': 'A', 'status': 'ok', 'host': '2', 'time1': '2020-01-06 06:31:06', 'time2': '-'}, {'Name': 'B', 'status': 'Alert', 'host': '1', 'time1': '2020-01-06 10:31:06', 'time2': '2020-02-06 21:10:00'}, {'Name': 'B', 'status': 'ok', 'host': '2', 'time1': '2020-01-06 10:31:06', 'time2': '2020-02-06 21:10:00'},{'Name': 'B', 'status': 'ok', 'host': '4', 'time1': '2020-01-06 10:31:06', 'time2': '2020-02-06 21:10:00'},{'Name': 'C', 'status': 'Alert', 'host': '2', 'time1': '2020-01-06 10:31:06', 'time2': '2020-02-06 21:10:00'},{'Name': 'C', 'status': 'ok', 'host': '3', 'time1': '2020-01-06 10:31:06', 'time2': '2020-02-06 21:10:00'},{'Name': 'C', 'status': 'ok', 'host': '4', 'time1': '-', 'time2': '-'}]
df = pandas.DataFrame(data)
df.set_index(['Name', 'status', 'host'], inplace=True)
html_body = df.to_html(bold_rows=False)
索引设置为分层行,以便在 html 表中阅读:
print(df)
time1 time2
Name status host
A ok 1 2020-01-06 06:31:06 2020-02-06 21:10:00
2 2020-01-06 06:31:06 -
B Alert 1 2020-01-06 10:31:06 2020-02-06 21:10:00
ok 2 2020-01-06 10:31:06 2020-02-06 21:10:00
4 2020-01-06 10:31:06 2020-02-06 21:10:00
C Alert 2 2020-01-06 10:31:06 2020-02-06 21:10:00
ok 3 2020-01-06 10:31:06 2020-02-06 21:10:00
4 - -
我唯一的解决方案是将每一列设置为索引。 这似乎不切实际,并留下一个必须手动删除的空行:
【问题讨论】:
-
df.reset_index().to_html(index=False, bold_rows=False) -
@piRSquared - reset_index() 将删除索引。即不再合并我想要的前 2 行中的重复值。输出的html表需要可读
-
确实如此。但这是因为 Pandas 对 MultiIndex 这样做的。您想要避免的列的错开正在发生,因为您想要“合并”的“列”实际上是 MultiIndex 的级别。因此,您可能需要自己解析对象并制作自己的 html 表。或者您可以破解您已经获得的结果 html。
-
df.reset_index()不会改变df本身。它返回一个新的数据帧,换句话说,一个用于.to_html调用的一次性变量
标签: pandas python-3.6