Pandas转换为日期时间和周数

6

我有一些按年和周格式化的数据。这是一个小样本:

    week    cases
0   192801  7647
1   192802  11427
2   192803  11970
3   192804  12920
4   192805  14660

这周的数据看起来好像是以%Y%W的格式排列的,但当我试图通过pd.to_datetime(df.week, format = '%Y%W')将其转换为日期时间时,我会收到每年的第一个月的第一天。

0   1928-01-01
1   1928-01-01
2   1928-01-01
3   1928-01-01
4   1928-01-01

发生了什么?我该如何正确格式化周数据?

2个回答

3

根据这个帖子,仅有周数是不足以推断日期的,还需要知道星期几。(我真的不确定为什么它不默认为0/星期天)

因此下面的代码似乎能够实现您想要的功能:

pd.to_datetime(df.week.map(lambda x: str(x)+'-0'), format="%Y%W-%w")

我们首先确保数据是一个 str 类型,然后在末尾添加 '-0'(表示星期日)。
使用额外的 %w 格式获取 '一周中的天'。
注意:
在 datetime 文档中发现了一个说明该行为的注释。
第8.1.8节 -> 注意事项 -> 点7

在 strptime() 方法中,只有在指定了一周的哪一天和日历年份 (%Y) 时,%U 和 %W 才会用于计算。


1
我认为你需要从周数中减去1,而且不需要使用map函数,只需将其向量化即可。pd.to_datetime(df.week.sub(1).astype(str).add('-0'), format="%Y%W-%w") - Ted Petrou

0

在将日期转换为datetime后(我认为需要日期中的一天),您可以使用dt.strftime在Series对象上格式化日期,如下所示:

pd.to_datetime(df.week, format = '%Y%W').dt.strftime('%Y-%W')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接