【发布时间】:2021-11-04 11:38:12
【问题描述】:
我正在尝试在 pandas 中获取给定日期和今天之间所有 YEAR 和 WEEK 组合的列表。
我几乎成功了,但是 pandas dt.year 和 dt.week 没有返回日期“2019-12-31”的所需值。
根据上述方法是 YEAR=2019 和 WEEK=1,而它应该返回 YEAR=2020 和 WEEK=1。
改进以下代码以解决前一年发生的这种 WEEK=1 的情况的最佳方法是什么?
import datetime
from datetime import date
import pandas as pd
base = datetime.date.today()
d1=date(2019,1,1)
delta=base-d1
monday1 = (base - datetime.timedelta(days=base.weekday()))
monday2 = (d1 - datetime.timedelta(days=d1.weekday()))
number_of_weeks_between = int((monday1 - monday2).days / 7)
date_list = [base - datetime.timedelta(days=x*7) for x in range(number_of_weeks_between+1)]
date_list = pd.DataFrame(date_list, columns =['Date'])
date_list['Date'] = date_list['Date'].astype('datetime64[ns]')
date_list['YEAR'] = date_list['Date'].dt.year
date_list['WEEK'] = date_list['Date'].dt.week
编辑:以下代码按预期工作:
import datetime
from datetime import date
import pandas as pd
base = datetime.date.today()
d1=date(2019,1,1)
delta=base-d1
monday1 = (base - datetime.timedelta(days=base.weekday()))
monday2 = (d1 - datetime.timedelta(days=d1.weekday()))
number_of_weeks_between = int((monday1 - monday2).days / 7)
date_list = [base - datetime.timedelta(days=x*7) for x in range(number_of_weeks_between+1)]
year_list = [x.isocalendar()[0] for x in date_list]
month_list = [x.isocalendar()[1] for x in date_list]
date_list = pd.DataFrame(
{'Date': date_list,
'YEAR': year_list,
'MONTH': month_list
})
date_list['Date'] = date_list['Date'].astype('datetime64[ns]')
【问题讨论】:
-
这能回答你的问题吗? Pandas datetime week not as expected