2017-02-10 78 views
3

我有一些数据是按年份和星期形成的。这里是一个小样本,就好像它是格式化像%Y%W熊猫到日期和星期

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

本周数据看,但是当我试图通过pd.to_datetime(df.week, format = '%Y%W)将其转换为datetime我每年接到的第一个月的第一天。

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

这是怎么回事?如何正确格式化星期数据?

回答

0

转换为datetime(我认为需要在日期一天时间),您可以使用dt.strftime系列物体像这样格式的日期:

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

this thread,似乎只是周数不足以推断日期。你也需要一周中的一天。 (我真的不知道为什么它不只是默认为0 /星期日)

所以下面似乎做你想要什么:

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

我们首先要确保数据是str,然后附加一个'-0'到最后(这意味着星期天)。
然后在格式中使用额外的%w来获取“星期几”。

注意:
在datetime文档中找到了一个注释,它解释了行为。
Section 8.1.8 -> Notes -> Bullet-point #7

当与strptime()方法中,%U和%的W仅在 计算 指定的星期和日历年(%Y)时使用。

+1

我认为你需要从一周减去1,并且你不需要'map'并且只是向量化它。 'pd.to_datetime(df.week.sub(1).astype(str).add(' - 0'),format =“%Y%W-%w”)' –