You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:10:27