我曾经使用年和周的数字将日期转换为一些提议。 它在2019年之前运行良好,但是当我尝试导入2019 wk1数据时,它就连接了。
2019 wk1在2019-01-07〜2019-01-03之间
但是相反,如果我使用日期将日期转换为年和周,那是正确的。
我可以知道我的代码有什么问题吗?谢谢
d = {'year': [2018, 2018, 2018, 2019, 2019, 2019], 'week': [0, 1, 52, 0, 1, 2]}
df = pd.DataFrame(data=d)
df['date'] = pd.to_datetime(df['year'].map(str) + df['week'].map(str) + '-4', format='%Y%W-%w')
df['yearwk'] = pd.to_datetime(df['date'], format='%Y-%M-%D').dt.strftime('%YW%V')
print(df)
year week date yearwk
0 2018 0 2018-01-04 2018W01
1 2018 1 2018-01-04 2018W01
2 2018 52 2018-12-27 2018W52
3 2019 0 2019-01-03 2019W01
4 2019 1 2019-01-10 2019W02
5 2019 2 2019-01-17 2019W03
我使用给定的年和周转换为日期。理想情况下,2019WK1应该在2018-12-31至2019-01-05之间,但它变成了2019-01-06至2019-01-13。 然后我使用该日期将其转换为年和周,结果就是预期的结果。
答案 0 :(得分:0)
根据strftime() and strptime() Behavior,
%W:一年中的第几周(星期一为一周中的第一天),以十进制数表示。第一个星期一之前的新的一年中的所有天均视为在第0周。
%w:工作日为十进制数字,其中0是星期日,6是星期六。
您输入4作为%w,表示您想要提供的星期几的日期。
从星期一开始的2018年的第一周(%W
= 1)是:1月1日-1月7日或1月4日(星期四)
从星期一开始的2019年的第一周(%W
= 1)是:1月7日-1月13日或1月10日(星期四)
对于2018年,上周没有星期四,因此%W
= 0将输出与%W
= 1相同的值。但是,对于2019年而言,前一周是星期四,因此%W
= 0将输出1月3日。