【发布时间】:2019-04-04 22:39:26
【问题描述】:
如何根据列中的唯一值循环遍历 pandas 数据框并插入单独的 Outlook 电子邮件?
这是我的代码:
def Emailer(subject, recipient):
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = recipient
mail.Subject = subject
mail.HtmlBody = """Lots of text"""
attachment = 'C:/Users/Documents/file.pdf'
mail.Attachments.Add(attachment)
mail.Display(True)
Emailer('subject', "multiple e-mails")
这是我想要循环并插入到每封电子邮件中的数据框。
df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
df['Email'] = np.random.choice(['john@mail.com', 'mark@mail.com', 'tina@mail.com'], 10)
A B Email
0 -0.740284 0.509764 mark@mail.com
1 0.119413 -1.270088 mark@mail.com
2 1.792915 -0.243748 mark@mail.com
3 0.181352 -1.949043 tina@mail.com
4 -0.172640 0.051009 john@mail.com
5 0.627760 -0.038189 tina@mail.com
6 -0.589791 -3.255643 tina@mail.com
7 1.654046 0.855315 tina@mail.com
8 2.213134 -0.266334 mark@mail.com
9 -0.907995 0.880413 mark@mail.com
假设蒂娜,她的邮件将是这样的。循环从df['Email'] 中取出行并将数据帧插入mail.HtmlBody,并将Email 中的值插入mail.To = recipient。此外,我希望 Mark 和 John 拥有类似结构的电子邮件。每封电子邮件的主题都相同。根据电子邮件,只有“收件人”和“正文”会有所不同。
To: tina@mail.com
Subject: subject
Body:
Lots of text
A B Email
3 0.181352 -1.949043 tina@mail.com
5 0.627760 -0.038189 tina@mail.com
6 -0.589791 -3.255643 tina@mail.com
7 1.654046 0.855315 tina@mail.com
编辑: 我做了一个 for 循环,将数据框拆分为唯一的表:
for email, df_email in df.groupby('Email'):
print(df_email)
A B Email
4 -0.17264 0.051009 john@mail.com
A B Email
0 -0.740284 0.509764 mark@mail.com
1 0.119413 -1.270088 mark@mail.com
2 1.792915 -0.243748 mark@mail.com
8 2.213134 -0.266334 mark@mail.com
9 -0.907995 0.880413 mark@mail.com
A B Email
3 0.181352 -1.949043 tina@mail.com
5 0.627760 -0.038189 tina@mail.com
6 -0.589791 -3.255643 tina@mail.com
7 1.654046 0.855315 tina@mail.com
【问题讨论】:
-
df['Email'].unique()应该会为您提供独特的电子邮件。你被困在哪里了? -
@pnv 我不确定如何创建用于创建带有数据框的单个电子邮件的 for 循环。
-
@Ben.T 不,每封电子邮件的主题都相同。只有“To”和“Body”会有所不同。
标签: python pandas loops dataframe outlook