如何修改DataFrame日期列格式、过滤当前周并保留格式发送Outlook邮件?
解决方案
1. 修改日期列格式
先确保"Next Milestone Date"列为datetime类型,再转换为目标格式:
import pandas as pd # 转换为datetime类型(若当前是字符串格式) df['Next Milestone Date'] = pd.to_datetime(df['Next Milestone Date']) # 格式化为dd-mm-yyyy df['Next Milestone Date'] = df['Next Milestone Date'].dt.strftime('%d-%m-%Y')
执行后该列将显示为13-01-2023格式。
2. 过滤当前周数据
采用ISO周标准(周一为一周起始)筛选数据:
from datetime import datetime # 获取当前年份和ISO周数 current_year, current_week, _ = datetime.now().isocalendar() # 提取数据日期的周信息(需确保日期列为datetime类型) df['week_info'] = pd.to_datetime(df['Next Milestone Date']).dt.isocalendar() # 过滤当前周数据 filtered_df = df[(df['week_info'].year == current_year) & (df['week_info'].week == current_week)] # 清理临时列 filtered_df = filtered_df.drop('week_info', axis=1)
若你的周起始为周日,可调整为使用dt.weekofyear(注意pandas版本兼容性,新版本推荐用isocalendar)。
3. 邮件发送时保留格式
修复原脚本的HTML标签问题,优化表格样式:
import win32com.client from datetime import datetime # 生成带基础样式的HTML表格 table_html = filtered_df.to_html(index=False, classes='table', justify='left') # 构建完整HTML邮件内容 full_html = f""" <h1>TEXT</h1> {table_html} <br> Kind regards,<br> NAME """ outlook = win32com.client.Dispatch('outlook.application') new_mail = outlook.CreateItem(0) new_mail.Subject = f'Daily Landscape {datetime.now().strftime("%#d %b %Y %H:%M")}' new_mail.To = "EMAIL ADDRESS" new_mail.HTMLBody = full_html new_mail.Send()
- 用
to_html的classes参数可自定义表格样式,也可添加style参数设置内联样式 - HTML中换行需用
<br>,\n不会生效 - 确保HTML标签正确闭合(原脚本未闭合
<h1>标签,已修正)
内容的提问来源于stack exchange,提问作者Jaaz Douglas
相关产品推荐
相关产品推荐

