如何在数据框中匹配今天的日期并发送电子邮件

时间:2017-08-18 11:17:35

标签: python pandas email dataframe

我学习如何使用熊猫来处理数据,我发现它很酷很有趣。我正在尝试构建一个自动电子邮件系统。

但现在我备了以下产品: 这个问题引用了我以前的一个问题here

这就是数据集的样子:

enter image description here

我想检查今天是否datatime_from,如果是,请取该行的电子邮件地址并发送电子邮件。我使用pandas作为数据帧,我的想法是使用smtplib发送电子邮件,但我愿意使用其他库。

以下是我的代码:

import smtplib
import pandas 

def send_me_email():
  server = smtplib.SMTP('smtp.gmail.com', 587)
  server.starttls()
  server.login('xxx@gmail.com', 'xxxxxxx')

  msg = "YOUR MESSAGE!"
  server.sendmail("YOUR EMAIL ADDRESS", "THE EMAIL ADDRESS TO SEND TO", msg)
  server.quit()

  msg = "YOUR MESSAGE!"
  server.sendmail("xxx@gmail.com", "xxx@gmail.com", msg)
  server.quit()

csv = pandas.read_csv('testfile.csv', delimiter=',')

#csv['datetime_from'].dtype

csv['datetime_from'] = pandas.to_datetime(csv['datetime_from'], errors='coerce')
#csv['datetime_from'].dtype

today_date = pandas.datetime.today().date()

csv2 = csv['datetime_from'].dt.date == today_date

csv['datetime_from'].where(csv).apply(send_me_email())

这不能正常工作,我无法弄清楚如何抓住所有实际日期的相应电子邮件地址并向这些地址发送电子邮件。数据文件将随着每天新输入而增长。

任何想法都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

您需要使用您获得的掩码来索引数据框:

csv2 = csv[csv['datetime_from'].dt.date == today_date]

此外,您的send_me_email必须使用df.apply传递给它的参数:

def send_me_email(email):
    ...

此参数是电子邮件。确保修改函数体以相应地处理它。

您现在可以使用df.apply应用您的功能。不要调用你的功能。你必须传递它(没有()):

csv2['E-Mail'].apply(send_me_email)