[英]Converting “year” and “week of year” columns to “date” in Pandas
为了将年份和年份的两列转换为日期,我希望执行以下操作:
df['formatted_date'] = df.year*100+df.weekofyear
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%w')
但是,它不起作用,给出ValueError :
ValueError: unconverted data remains: 01
我发现解决方法是将一年中的星期转换为一年中的某一天,并使用year-dayofyear %Y%j
格式:
df['formatted_date'] = df.year*1000+df.weekofyear*7-6
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%j')
第一行很丑陋,但是效果很好。 一年中的星期在(00,53)范围内。 有什么想法,为什么优雅的方式不起作用?
您需要将%w
组合成一周的某天-用%W
进行解释 :
http://strftime.org/用于%W
:
一年中的星期数(星期一为一周的第一天),以十进制数表示。 第一个星期一之前的新的一年中的所有天均视为在第0周。
对于%w
:
以十进制数表示的工作日,其中0是星期日,6是星期六。
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
另一个解决方案:
#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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.