Reputation: 95
I am writing a function to update the week number of any year date falls in between Dec29-Jan3. I tried as below and called function, but its showing exception as
('strptime() argument 1 must be string, not Series', u'occurred at index 0')
def week_number_update(x):
dec_day = [29,30,31]
jan_day = [1,2,3]
input_date = datetime.datetime.strptime(x, "%Y-%m-%d")
input_month = input_date.month
input_day = input_date.day
if input_month == 12:
if input_day in dec_day:
week_number = datetime.date(input_date.year, 12, 28).isocalendar()[1]
elif input_month == 1:
if input_day in jan_day:
week_number = datetime.date(input_date.year, 1, 4).isocalendar()[1]
else:
week_number = x['date'].dt.week
return(week_number);
Calling:
df['week'] = df.apply(lambda x: week_number_update(x), axis=1)
Thanks.
Upvotes: 1
Views: 50
Reputation: 862661
I believe you need if input column is datetime
:
rng = pd.date_range('2017-12-27', periods=10) | pd.date_range('2018-12-27', periods=10) | \
pd.date_range('2019-12-27', periods=10) | pd.date_range('2020-12-27', periods=10)
df = pd.DataFrame(rng)
#print (df)
def week_number_update(input_date):
dec_day = [29,30,31]
jan_day = [1,2,3]
input_month = input_date.month
input_day = input_date.day
if input_month == 12 and input_day in dec_day:
week_number = date(input_date.year, 12, 28).isocalendar()[1]
elif input_month == 1 and input_day in jan_day:
week_number = date(input_date.year, 1, 4).isocalendar()[1]
else:
week_number = input_date.week
return week_number
df['week'] = df[0].apply(week_number_update)
df['week_orig'] = df[0].dt.week
print (df)
0 week week_orig
0 2017-12-27 52 52
1 2017-12-28 52 52
2 2017-12-29 52 52
3 2017-12-30 52 52
4 2017-12-31 52 52
5 2018-01-01 1 1
6 2018-01-02 1 1
7 2018-01-03 1 1
8 2018-01-04 1 1
9 2018-01-05 1 1
10 2018-12-27 52 52
11 2018-12-28 52 52
12 2018-12-29 52 52
13 2018-12-30 52 52
14 2018-12-31 52 1
15 2019-01-01 1 1
16 2019-01-02 1 1
17 2019-01-03 1 1
18 2019-01-04 1 1
19 2019-01-05 1 1
20 2019-12-27 52 52
21 2019-12-28 52 52
22 2019-12-29 52 52
23 2019-12-30 52 1
24 2019-12-31 52 1
25 2020-01-01 1 1
26 2020-01-02 1 1
27 2020-01-03 1 1
28 2020-01-04 1 1
29 2020-01-05 1 1
30 2020-12-27 52 52
31 2020-12-28 53 53
32 2020-12-29 53 53
33 2020-12-30 53 53
34 2020-12-31 53 53
35 2021-01-01 1 53
36 2021-01-02 1 53
37 2021-01-03 1 53
38 2021-01-04 1 1
39 2021-01-05 1 1
Upvotes: 1