如何在python中从指定的年份日期获取周数?

vc6uscn9  于 2022-11-19  发布在  Python
关注(0)|答案(3)|浏览(167)

我有一个时间序列数据,我想从初始日期开始获取周数

date   
20180401
20180402
20180902
20190130
20190401

尝试过的东西
代码

df["date"]= pd.to_datetime(df.date,format='%Y%m%d')  
df["week_no"]= df.date.dt.week

但是在2019年重置的周数会导致获得2018年的共同周数。我们可以在其中做些什么吗?

zynd9foi

zynd9foi1#

您可以使用此函数计算周中两天之间的差值:

def Wdiff(fromdate, todate):
     d = pd.to_datetime(todate) - pd.to_datetime(fromdate)
     return int(d / np.timedelta64(1, 'W'))
nhhxz33t

nhhxz33t2#

您可以使用指定的日期建立datetime对象,然后使用isocalendar方法撷取周数:

import datetime

myDate = datetime.date(2018, 4, 1)
week = myDate.isocalendar()[1]
print(week)

然后,您可以计算2018年剩余的总周数,然后将其间每年的总周数相加,最后将当前日期的周数相加。
例如,此代码将打印从2018年4月1日到2020年5月6日的周数:

import datetime

myDate = datetime.date(2018, 4, 1)
currentDate = datetime.date(2020, 5, 6)

weeks = datetime.date(myDate.year, 12, 28).isocalendar()[1] - 
myDate.isocalendar()[1]

for i in range(myDate.year, currentDate.year):
    weeks += datetime.date(i, 12, 28).isocalendar()[1]

weeks += currentDate.isocalendar()[1]
print(weeks)

请注意,由于isocalendar的工作方式,12月28日始终是给定年份的最后一周。
ISO年由52或53个完整的周组成,其中一周从星期一开始,到星期日结束。ISO年的第一周是包含星期四的一年中的第一个(公历)日历周。这称为第1周,该星期四的ISO年与公历年相同。
有关isocalendar的更多信息,请访问:https://docs.python.org/3/library/datetime.html

pbpqsu0x

pbpqsu0x3#

要获取周数,但作为2位字符串(带前导零),可以运行:

df['week_no'] = df.date.dt.strftime('%W')

对于稍微扩展的源数据,结果为:

date week_no
0  2018-04-01      13
1  2018-04-02      14
2  2018-09-02      35
3  2018-12-30      52
4  2018-12-31      53
5  2019-01-01      00
6  2019-01-02      00
7  2019-01-03      00
8  2019-01-04      00
9  2019-01-05      00
10 2019-01-06      00
11 2019-01-07      01
12 2019-01-30      04
13 2019-04-01      13

请注意,2018年的最后一天(星期一)的周数== 53,2019年的“初始”天(截至2019年1月6日星期日)的周数== 00。
如果希望此列的格式为 int,请将.astype(int)追加到上面的代码中。

相关问题