我使用 Pandas DataFrames 的 style 属性来创建用于电子邮件发送的 HTML 表。
我遇到的问题是我有当我希望它显示为日期时,它显示为日期时间戳记的日期时间索引。我对时间部分不感兴趣。在解释器中,DataFrame 确实正确打印出来(仅显示日期部分)。但是,当我使用表的 style 属性进行样式化后进行渲染时,它会生成同时显示时间部分的 HTML。我研究过使用style.format()
但我无法访问索引列。
我会重置索引以使日期时间列成为普通列...但我的标题列是 MultIndex。如果我展平并且不使用索引,则该表看起来很奇怪。
不幸的是我在 .style 文档中发现了这一点:
局限性
- 仅数据框(使用
Series.to_frame().style
)
- 索引和列必须是唯一的
- 没有大的重复,并且性能也不是很好;这是用于汇总数据框
- 您只能设置值的样式,而不能设置索引或列的样式
- 您只能应用样式,不能插入新的 HTML
其中一些问题将在未来得到解决。
https://pandas.pydata.org/pandas-docs/stable/style.html#Limitations
我发帖是为了看看是否有人对我如何解决这个问题有任何想法。谢谢!
显示问题的示例表:示例_表_链接 https://htmlpreview.github.io/?https://gist.githubusercontent.com/aleksarias/78b67b61ca4f0543f5fba4705caf2fd8/raw/f78527a38c650121108161492c779b97af126907/html_sample.html
生成表的代码:
account_day_df = merged[['Day', 'Metric1', 'Metric2', 'Metric3', 'Metric4', 'Campaign type']]
account_day_df = account_day_df.groupby(['Day', 'Campaign type']).sum()
account_day_df.loc[:, 'Metric5'] = account_day_df['Metric1'] / account_day_df['Metric4']
account_day_df = account_day_df.unstack('Campaign type')
html += (
account_day_df.style
.background_gradient(cmap=cm, subset=['Metric5'])
.set_table_attributes('border="1" class="dataframe table table-hover table-bordered"')
.render(i)
)