python发邮件:pandas DataFrame.to_html 改变数字的显示格式,float_format,formatters

呼延才俊
2023-12-01

工作中需要利用邮件每天向领导发送报表和一些统计数据,利用python可以实现每天定时发送非常方便,而且可以在正文中附上pandas dataframe表格,df.to_html就可以实现

用法非常简单,但是如果我们想把表格制作得更友好一些呢? 毕竟领导的时间很宝贵。
比如我们想让表格里的数字显示千分位分隔符,同时保留两位小数
那就可以通过float_format 或者 formatters来指定显示规则,一开始对于官方文档的解释不是很懂

  • formatters : list or dict of one-parameter functions, optional
    formatter functions to apply to columns’ elements by position or name, default None. The result of each function must be a unicode string. List must be of length equal to the number of columns.

  • float_format : one-parameter function, optional
    formatter function to apply to columns’ elements if they are floats, default None. The result of this function must be a unicode string.

这里的 on-parameter function 长什么样呢?

摸索了一下,这里的format函数可以通过以下两种方式定义:

  • 常规定义法 def
def myFormat(x):
	# 保留两位小数,显示千分位分隔符
	return format(x,',.2f')
  • lambda 定义法
lambda x: format(x,',.2f')

这里的formatters可以指定某些列的格式(包括但不限于数字的格式),float_format则是应用于表格中所有的数字(float)

  • 更复杂的formatt可参考 Style

用法如下

df.to_html(index=False, formaters={'A':myFormat})  # 其中A列为数字
# 或者
df.to_html(index=False, float_format=lambda x: format(x,',.2f'))
 类似资料: