首页 > 解决方案 > 比较每行 x 列中的日期和 y 列的打印值

问题描述

我对 python 编程语言比较陌生,并将我的小项目作为学习 python 的目标。现在我正在努力解决两个(可能)小问题。一般来说,我想将生日日期与当前日期进行比较。如果“生日”栏中的生日日期=今天,则应在句子中打印此人的姓名。

我遇到的第一个问题是我需要比较日期和月份,而不是年份,我无法弄清楚。第二个问题是我无法弄清楚如何打印今天生日的人的姓名。我尝试的是通过索引“名字”,但随后将打印整个索引。附表和代码。预先感谢您的帮助。

生日
大卫 07.05.1986
罗伯特 17.12.1976
和平 坦率 02.09.2021

生日为 02.09.2021 的最后一个被修改为具有真实结果。

输入

from datetime import date
from datetime import timedelta
from openpyxl import load_workbook

wb=load_workbook("U:\\Python\\untitled\\Birthdaylist.xlsx")

ws=wb["Sheet1"]
import pandas as pd
df=pd.DataFrame(ws.values)
df.columns=df.iloc[[0]].values.tolist()[0]
df=df[1:]
df.head()

for i in df["Birthday"]:
    if i.date()< date.today():
       print("It's no one's birthday today!")
    if i.date() == date.today():
       print("Today is ",(df["First Name"]), "'s birthday")
    if date.today() < i.date() < (date.today()+ timedelta(days=3)):
       print(df["First Name"], "'s birthday is on ", df["Birthday"].date, ".")

输出

It's no one's birthday today!
It's no one's birthday today!
It's no one's birthday today!
It's no one's birthday today!
It's no one's birthday today!
Today is  1     David
2    Robert
3     Frank
4     Julia
5     Marie
Name: First Name, dtype: object 's birthday

标签: pythonpandasdatetime

解决方案


你想在 pandas 中执行此操作(根据标签看起来很像)吗?

# read file
df = pd.read_excel('Birthdaylist.xlsx')

# ensure datetime
df['Birthday'] = pd.to_datetime(df['Birthday'], dayfirst=True)

# set up condition for birthday
today = pd.to_datetime('today', dayfirst=True)
has_birthday = ( df['Birthday'].dt.month.eq(today.month)
                &df['Birthday'].dt.year.eq(today.year)
               )

# slice dataframe
df[has_birthay]

输出:

  Last Name First Name   Birthday
2     Peace      Frank 2021-09-02

印刷部分:

if len(df[has_birthday])>0:
    for _, row in df[has_birthday].iterrows():
        print(f"Today is {row['First Name']}'s birthday") # NB. prints several rows if multiple birthdays
else:
    print("It's no one's birthday today!")

推荐阅读