首页 > 解决方案 > 熊猫解析周数

问题描述

考虑以下文件test.csv

"Time","RegionCode","RegionName","NumValue"
"2009-W40","AT","Austria",0
"2009-W40","BE","Belgium",54
"2009-W40","BG","Bulgaria",0
"2009-W40","CZ","Czech Republic",1

我想解析存储在第一列中的日期,并想创建一个像这样的数据框:

parser = lambda x: pd.datetime.strptime(x, "%Y-W%W")
df = pd.read_csv("test.csv", parse_dates=["Time"], date_parser=parser)

结果:

    Time    RegionCode  RegionName  NumValue
0   2009-01-01  AT  Austria 0
1   2009-01-01  BE  Belgium 54
2   2009-01-01  BG  Bulgaria    0
3   2009-01-01  CZ  Czech Republic  1

但是,生成的时间列不正确。我得到的只是“2019-01-01”,这肯定不是一年中的第 40 周。难道我做错了什么?解析周时还有其他人遇到这个问题吗?

标签: pandasdatetime

解决方案


你几乎是正确的。唯一的问题是,您无法根据周数和年份确定具体日期。诀窍是将星期几添加为 1。

我建议pd.to_datetime()像您最初尝试的那样坚持并提供日期格式字符串。加上1应该可以正常工作:

pd.to_datetime(df['Time'] + '-1', format='%Y-W%W-%w')
# 0   2009-10-05
# 1   2009-10-05
# 2   2009-10-05
# 3   2009-10-05

推荐阅读