熊猫to_datetime将年周转换为2019年的日期,第一周为wk0

时间:2019-01-07 15:28:11

标签: python pandas

我曾经使用年和周的数字将日期转换为一些提议。 它在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。 然后我使用该日期将其转换为年和周,结果就是预期的结果。

1 个答案:

答案 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日。