As an example, try something like this:
import pandas as pd
# open the file to a dataframe called 'df'
# df = pd.read_csv('yourFile.csv')
# for this demo use:
df = pd.DataFrame({'name': {0: 'Test', 1: 'Charlotte'},
' email': {0: 'test@email.com', 1: 'me@yahoo.com'},
' year': {0: 1961, 1: 2020},
' month': {0: 12, 1: 8},
' day': {0: 21, 1: 25}})
# remove spaces in the column names
df.columns = df.columns.str.replace(' ', '')
# get the individual columns that make up the date to a column with a datetime format
df = df.astype({'year': 'str', 'month': 'str', 'day': 'str'})
df['date'] = df[['year', 'month', 'day']].agg('-'.join, axis=1)
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
del df['month'], df['year']
print(df)
'''
>> name email day date
>> 0 Test test@email.com 21 1961-12-21
>> 1 Charlotte me@yahoo.com 25 2020-08-25
'''
# create a function to return all email addresses (as a list)
# where the month matches the current month and the day is one week in the future
def sendReminders(delay=7):
return (df.loc[(df['date'].dt.dayofyear > pd.Timestamp.now().dayofyear) &
(df['date'].dt.dayofyear <= (pd.Timestamp.now().dayofyear + delay)), 'email'].tolist())
# call the function to return a list of emails for reminders but override the 7 days and set to 5 day as an example
print(sendReminders(5))
'''
>> ['me@yahoo.com']
'''
print('\n')
Obviously you keep going and add more functions etc. The point is to clean your data and get the columns correct and in the right format.
Once you have the data in a dataframe organized you can do all sorts of calculations. Chances are there is a method already for it and you just need to find it.