我将数据框作为html表嵌入到电子邮件正文中。我想根据每个单元格中的值有条件地格式化单元格颜色和文本颜色。
我首先从示例csv文件中读取一些数据,并使用pandas
to_html()
方法将其格式化为html表:
df = pd.read_csv('example.csv')
table = df.to_html()
现在我为邮件正文创建一些带有<style>
标记的基本html,并将table
html代码插入<div>
字符串正文中的msg
,如下所示:
msg = """<html>
<style type = "text/css">
table, th, td { border: 1px solid black; }
</style>
<head></head>
<body>
<p>some text</p>
<div> %s </div>
</body
</html>""" % (table)
然后我使用<style>
python模块将premailer
css代码转换为内联样式:
from premailer import transform
result = transform(msg)
现在result
是一个html字符串,其中的表格具有类似<table border="1" class="dataframe" style="border:1px solid black">
的内嵌样式
我将生成的html嵌入到电子邮件中:
msg_body = MIMEText(result, 'html')
msg.attach(msg_body)
这一切都很有效。
现在我需要根据每个单元格中的值有条件地格式化单元格颜色和字体颜色。
我怎样才能做到最好? 正在思考一些功能,如:
def styleTable(x):
if x < 0:
return 'background-color: red'
else
return ''
但是如何将其应用于我的html字符串?或者我需要做一些不同的上游工作吗?
同样,这将嵌入电子邮件中,因此不能包含Javascript或CSS代码。感谢
答案 0 :(得分:0)
使用pandas中的当前开发,可以在将数据框转换为HTML之前修改数据框的style
。
简单的解决方案是定义一个函数并将其作为参数传递给apply
的{{1}}函数。
以下是一个例子:
style
您可以在此处详细了解:http://pandas.pydata.org/pandas-docs/stable/style.html#Building-Styles