如何将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
相关产品推荐
相关产品推荐

