Convert a column with a week number to a date

Viewed 193

Is there any way the below code can be modified to convert an entire column? I have tried several formats and am unable to get this code to work on a column of data:-

>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> week = 40
>>> year = 2019
>>> date = datetime.date(year,1,1)+relativedelta(weeks=+week)
>>> date
datetime.date(2019, 10, 8)

Many thanks for helping with this.

3 Answers

You can try with define your own function.

def yourfunc(year, week):
    return datetime.date(year,1,1)+relativedelta(weeks=+week)

df['new'] = [ yourfunc(x, y) for x, y in zip(df['year'], df['week'])]

May be something like this:

import datetime
from dateutil.relativedelta import relativedelta
week = 40
year = 2019
date = datetime.date(year,1,1)+relativedelta(weeks=-week)

df = pd.DataFrame({'year': [2019, 2020], 'week': [40, 10]})
df['date'] = df.apply(lambda x: datetime.date(x.year,1,1) + 
                      relativedelta(weeks=-int(x.week)), axis=1)
print(df)

   year  week        date
0  2019    40  2018-03-27
1  2020    10  2019-10-23

Kr

assuming your df looks like

import pandas as pd

df = pd.DataFrame({'year': [2020, 2020, 2021, 2021],
                   'week': [52, 53, 1, 2]})

and 'week' specifies the ISO week, you can use

df['date'] = pd.to_datetime((df['year']*100+df['week']).astype(str)+'1' , format='%G%V%u')

# df['date']
# 0   2020-12-21
# 1   2020-12-28
# 2   2021-01-04
# 3   2021-01-11
# Name: date, dtype: datetime64[ns]

Note that you need to specify a weekday; in the example I use '1' for Monday. See strftime() and strptime() Format Codes for more info.

Related