如何在HTML邮件模板中嵌入Pandas DataFrame动态数据
如何将Pandas DataFrame数据嵌入HTML邮件模板
核心需求
替换HTML邮件中的两处动态内容:
- 将「Dear User」中的
User替换为DataFrame最后一行的指定列值 - 将「Users daily amount」替换为DataFrame最后一行的特定原因列值
实现步骤与代码示例
1. 准备示例DataFrame
假设你的DataFrame包含用户名称和异常原因两列(请根据实际业务调整列名):
import pandas as pd # 示例数据,实际使用时替换为你的数据源 df = pd.DataFrame({ 'username': ['Alice', 'Bob', 'Charlie'], 'anomaly_reason': ['Daily login spike', 'Unusual transaction volume', 'Users daily amount'] })
2. 提取DataFrame最后一行的目标值
通过iloc[-1]定位到DataFrame的最后一行,提取需要的字段:
# 获取最后一行记录 last_record = df.iloc[-1] # 提取用户名称和异常描述 target_user = last_record['username'] target_anomaly = last_record['anomaly_reason']
3. 构建带动态变量的HTML邮件内容
使用Python的f-string语法直接替换HTML模板中的占位符:
from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 初始化邮件对象 msg = MIMEMultipart() # 构建HTML内容,嵌入动态变量 html_content = f''' <html> <body> <p><img src="cid:1" width="900" height="100"></p> <b><h1 style="text-align: left;">Pay Attention!</h1></b> <h3 style="text-align: left;">Dear {target_user},</h3> <p>There has been an anomaly in the following meaurement: </p> <b><p>{target_anomaly}</p></b> <h3>Reasons: </h3> <p> - Increase in the amount of Information Request sent</p> <p> - Unknown new rule firing </p> <h3>Last 2 Weeks Activity</h3> <p><img src="cid:0"></p> </body> </html> ''' # 将HTML内容附加到邮件 msg.attach(MIMEText(html_content, 'html', 'utf-8'))
注意事项
- 列名匹配:确保代码中引用的列名与你的DataFrame实际列名完全一致,否则会引发KeyError
- 空DataFrame处理:如果DataFrame可能为空,需提前判断避免报错:
if not df.empty: last_record = df.iloc[-1] target_user = last_record['username'] target_anomaly = last_record['anomaly_reason'] else: # 设置默认值 target_user = 'Valued User' target_anomaly = 'Unknown measurement anomaly'
内容的提问来源于stack exchange,提问作者Amitay Auerbach
相关产品推荐
相关产品推荐

