【问题标题】:Python to loop through pandas dataframe, insert different recipients, title and email contents into outlook emailPython 循环遍历 pandas 数据框,将不同的收件人、标题和电子邮件内容插入到 Outlook 电子邮件中
【发布时间】:2020-09-23 10:05:07
【问题描述】:

我有一个数据框 (df),其中每列的值如下所示:

Example of Dataframe

如何根据 df['Owning'] 和 df['Type'] 中的唯一值循环遍历 pandas 数据框,并将其分离到具有不同所有者和抄送列表的不同 Outlook 电子邮件?

以下是为一种“拥有”类型发送的代码。


TROGY=df[df['Owning']=='TROGY']

TROGY_21=TROGY[[TROGY['Type']=='210s']

TROGY_22=TROGY[[TROGY['Type']=='220s']

TROGY_21C2=TROGY_21[TROGY_21['CLASS']=='CLASS 2']

TROGY_21C3=TROGY_21[TROGY_21['CLASS']=='CLASS 3']

TROGY_22C2=TROGY_22[TROGY_22['CLASS']=='CLASS 2']

TROGY_22C3=TROGY_22[TROGY_22['CLASS']=='CLASS 3']



sender = 'donotreply@outlook.com'

recipient = TROGY['Owner'] ---- group by df['Owning'] and df['Type'] 

subject = 'Highlight For the Day XXX, YYYYY'



XXX referring to df['Owning']

YYYYY referring to df['Type'] 



msg = MIMEMultipart('alternative')

msg['Subject'] = subject

msg['From'] = sender

msg['To'] = ','.join(recipient)


body = ("""\

<html>

  <head></head><h2 align=center>CONVERSION</h2>

  <body>

         <div>Dear Conversion Owners, below is the highlight for the day.</div>

  Class 2

    {0}

  Class 3

    {1}

  </body>

</html>


""".format(TROGY_21C2_Block.to_html(),TROGY_21C3.to_html()))


msg.attach(MIMEText(body, 'html'))

try:
   smtpObj = smtplib.SMTP('relay.xx.com', 'xx')

   smtpObj.sendmail(sender, recipient, msg.as_string()) 
        
   print ("Successfully sent emai")

   smtpObj.quit()

except smtplib.SMTPException:

   print ("Error: unable to send email")

希望的结果是总共有 5 封电子邮件发送给“所有者”列中指定的收件人,并具有不同的电子邮件标题。

电子邮件 1 标题:“今天的亮点 TROGY,210 年代”

收件人:肯特,莉莉

电子邮件 2 标题:“今天的亮点 TROGY,220 年代”

收件人:肯特,

电子邮件 3 标题:“PHM, 210s 今日亮点”

收件人:bose

电子邮件 4 标题:“FUSION 210 年代的亮点”

收件人:Nikki

电子邮件 5 标题:“FUSION 220 年代的亮点”

收件人:gaddam

【问题讨论】:

    标签: python pandas dataframe email outlook


    【解决方案1】:

    您可以使用 pandas groupby["Owning", "Type"] 作为参数。之后,使用to_list() 而不是g["Owner"] 创建收件人列表。对于主题文本,您可以使用 groupby 函数的返回值,它是所使用的每列的组名称。

    输入 sample.csv

    ID,Owning,CLASS,Type,Owner,CC list
    GD8235,TROGY,CLASS 2,210s,Kent,John
    GD8298,TROGY,CLASS 3,210s,Lili,Ricky
    GD8238,PHM,CLASS 3,210s,Bose,Ricky
    GD8239,FUSION,CLASS 3,220s,Gaddam,Edmund
    GD8240,TROGY,CLASS 2,220s,Kent,John
    GD8243,FUSION,CLASS 2,210s,Nikki,John
    
    import pandas as pd
    
    df = pd.read_csv("sample.csv")
    print(df)
    
    groups = df.groupby(["Owning", "Type"])
    for n, g in groups:
        recipient = ", ".join(g["Owner"].to_list())
        subject = f'Highlight For the Day {n[0]}, {n[1]}'
    
        print(f"Title: {subject}")
        print(f"Recipient: {recipient}")
    
    Title: Highlight For the Day FUSION, 210s
    Recipient: Nikki
    Title: Highlight For the Day FUSION, 220s
    Recipient: Gaddam
    Title: Highlight For the Day PHM, 210s
    Recipient: Bose
    Title: Highlight For the Day TROGY, 210s
    Recipient: Kent, Lili
    Title: Highlight For the Day TROGY, 220s
    Recipient: Kent
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2017-11-01
      • 1970-01-01
      • 2017-06-15
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多