首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Pandas中的“年份”和“年份周”栏转换为“日期”

将Pandas中的“年份”和“年份周”栏转换为“日期”
EN

Stack Overflow用户
提问于 2019-03-18 13:23:35
回答 1查看 8.7K关注 0票数 7

期望方式

为了将年和周的两列转换为日期,我希望这样做:

代码语言:javascript
复制
df['formatted_date'] = df.year*100+df.weekofyear
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%w')

但是,它不起作用,给了ValueError

代码语言:javascript
复制
ValueError: unconverted data remains: 01

解决办法

我发现,解决办法是将一年中的一周转换为一年中的某一天,并使用年复一年的%Y%j格式:

代码语言:javascript
复制
df['formatted_date'] = df.year*1000+df.weekofyear*7-6 
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%j')

第一行变得丑陋,但这很好。一年中的每周都在(0053)。任何想法,为什么优雅的方式不起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 13:28:31

您需要将%w用于一周中的一天-- explanation%W用于一周:

http://strftime.org/ for %W

年中的周数(星期一为一周的第一天)为十进制数。在第一个星期一之前的新年里,所有的日子都被认为是在第0周。

对于%w

工作日是十进制数,其中0是星期天,6是星期六。

代码语言:javascript
复制
df = pd.DataFrame({'year':[2015, 2018],
                   'weekofyear':[10,12]})

dates = df.year*100+df.weekofyear
@adde
df['date'] = pd.to_datetime(dates.astype(str) + '0', format='%Y%W%w')
print (df)

   year  weekofyear  formatted_date       date
0  2015  10          201510         2015-03-15
1  2018  12          201812         2018-03-25

另一种解决办法是:

代码语言:javascript
复制
#added 0 only for demontration, you can remove it
df['formatted_date'] = df.year * 1000 + df.weekofyear * 10 + 0
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%W%w')
print (df)

   year  weekofyear  formatted_date       date
0  2015  10          2015100        2015-03-15
1  2018  12          2018120        2018-03-25
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55222420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档