我学习如何使用熊猫来处理数据,我发现它很酷很有趣。我正在尝试构建一个自动电子邮件系统。
但现在我备了以下产品: 这个问题引用了我以前的一个问题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())
这不能正常工作,我无法弄清楚如何抓住所有实际日期的相应电子邮件地址并向这些地址发送电子邮件。数据文件将随着每天新输入而增长。
任何想法都将受到赞赏。
答案 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)