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

如何将Outlook循环遍历的所有邮件实例添加至DataFrame每行?

问题分析

你的代码核心问题是每次循环都重新创建了df变量,之前循环获取的邮件数据会被覆盖,最终只保留了最后一条邮件记录。

修正方案

方案1:先收集所有邮件再生成DataFrame(推荐,效率更高)

先将所有邮件实例存入列表,再一次性生成DataFrame,避免循环中重复创建对象带来的性能损耗:

import win32com.client as client
import pandas as pd

outlook = client.Dispatch('Outlook.Application')
namespace = outlook.GetNameSpace('MAPI')
account = namespace.Folders['rim5532@psu.edu']
inbox = account.Folders['Inbox']

# 收集所有邮件到列表
messages = [msg for msg in inbox.Items]

# 一次性构建DataFrame
df = pd.DataFrame({"Message": messages})

print(df)

如果需要按收件时间排序邮件,可以在收集时添加排序逻辑:

# 按收件时间倒序排列(最新的在前)
messages = sorted(inbox.Items, key=lambda x: x.ReceivedTime, reverse=True)

方案2:循环中逐步追加数据(适合小数据量场景)

先初始化空DataFrame,每次循环用pd.concat追加行数据(注意append方法在新版pandas中已被弃用):

import win32com.client as client
import pandas as pd

outlook = client.Dispatch('Outlook.Application')
namespace = outlook.GetNameSpace('MAPI')
account = namespace.Folders['rim5532@psu.edu']
inbox = account.Folders['Inbox']

# 初始化空DataFrame
df = pd.DataFrame(columns=["Message"])

for msg in inbox.Items:
    # 追加单条邮件记录
    df = pd.concat([df, pd.DataFrame({"Message": [msg]})], ignore_index=True)

print(df)

内容的提问来源于stack exchange,提问作者Rob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:20:43