Pandas DataFrame 到 HTML:格式化值以显示居中
Posted
技术标签:
【中文标题】Pandas DataFrame 到 HTML:格式化值以显示居中【英文标题】:Pandas DataFrame to HTML: Formatting the values to display centered 【发布时间】:2018-09-28 22:27:30 【问题描述】:我有一个pandas
DataFrame
并且正在使用DataFrame.to_html
方法生成一个可以在HTML 电子邮件中发送的表格。我只是希望某些列中的值居中,但也想知道一般如何将格式应用于表格。我曾尝试在使用 to_html
之前应用找到的文档 HERE 以及使用 df.style
,如下所示:
df.style.set_properties(**'text-align':'center')
但我仍然让我的所有值左对齐(标题除外,它们是居中的)。
将我的所有(或子集)列值居中的正确方法是什么,还有哪些其他可用于格式化的选项? (例如,加粗文本、更改背景或边框颜色等)
此外,应该在什么阶段应用这种格式?在to_html
方法内还是在我尝试使用df.style
之前?谢谢!
【问题讨论】:
【参考方案1】:经过一些研究和Bubble Bubble Bubble Gut 的帮助,这可以通过将所有<tr>
标签替换为<tr align="center">
来轻松完成:
html2 = html.replace('<tr>', '<tr align="center">')
print(html2)
【讨论】:
或者像这样使用 CSS 例如 TD 和 TH 标签html = str(df_group[:5].to_html()).replace('<td>', '<td style="text-align: left">').replace('<th>', '<th style="text-align: left">')
【参考方案2】:
我建议在to_html
函数中使用formatters,参数说明:
格式化程序:单参数函数的列表或字典,可选格式化程序函数,按位置或名称应用于列元素, 默认无。每个函数的结果必须是一个 unicode 字符串。 列表的长度必须等于列数。
例如,如果您想将所有 Name
列加粗:
df.to_html(formatters='Name': lambda x: '<b>' + x + '</b>')
让我知道它是否有效!
【讨论】:
这对我来说很有意义。您能否举个例子,使用formatters
将所有单元格值(所有列)居中?
@RichardGolz 如果只是为了使单元格居中,我可能只是修改使用df.to_html
后得到的字符串,方法是在align='center'
标记内添加align='center'
,使其变为@ 987654328@,对我来说,这比将每列居中更直接。
类似html[:6] + ' align="center"' + html[6:]
我现在有了<table align="center" border="1" class="dataframe">
,但它似乎仍然是左对齐的。叹。下面我确实看到了<thead> <tr style="text-align: right;">
- 想知道这是否与它有关(尽管我的数据显示为左对齐)
html.replace('text-align: right;', 'text-align: center')
解决问题了吗?【参考方案3】:
我通过对 CSS 和 python 代码稍作改动解决了这个问题。这是我的python代码:
dft.to_html(classes=["table-bordered", "table-striped", "table-hover", "isi"]
我创建“isi”类并用 CSS 写成这样:
.isi
text-align:center;
这是结果 Values Centered
【讨论】:
不熟悉CSS的朋友,代码应该是完整的。代码示例在“isi”的定义中给出了“无效语法”错误以上是关于Pandas DataFrame 到 HTML:格式化值以显示居中的主要内容,如果未能解决你的问题,请参考以下文章
pandas Dataframe,将特定值从一个单元格移动到另一个单元格
pandas将列表list插入到dataframe的单元格中pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes)
如何将带有 NaN 的合并 Excel 单元格读入 Pandas DataFrame