Python 循环浏览数据框,将收件人和数据框插入Outlook电子邮件

Python 循环浏览数据框,将收件人和数据框插入Outlook电子邮件,python,pandas,loops,dataframe,outlook,Python,Pandas,Loops,Dataframe,Outlook,如何基于列中的唯一值循环遍历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 =

如何基于列中的唯一值循环遍历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。此外,我希望马克和约翰有类似结构的电子邮件。每封电子邮件的主题都是相同的。根据电子邮件的不同,只有收件人和正文会有所不同

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

我认为您正在寻找从数据帧创建可读字符串的方法。然后,您可以执行以下操作:

for i in df['Email'].unique():
    create_mail(i)
在Outlook上创建任意功能的电子邮件。在这种情况下,您需要添加

df[df['Email'] == i].to_string()
到mail.HtmlBody


另一方面,可能也值得一试。

df['Email']。unique应该为您提供独一无二的电子邮件。你被困在哪里?@pnv我不知道如何创建for循环来创建带有数据帧的单个电子邮件。@Ben.T不,每个电子邮件的主题都是相同的。只有身体和身体会不同。看起来是个好的开始!我只需要在数据帧转换为html时修复它。