期望方式
为了将年和周的两列转换为日期,我希望这样做:
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解决办法
我发现,解决办法是将一年中的一周转换为一年中的某一天,并使用年复一年的%Y%j格式:
df['formatted_date'] = df.year*1000+df.weekofyear*7-6
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%j')第一行变得丑陋,但这很好。一年中的每周都在(0053)。任何想法,为什么优雅的方式不起作用?
发布于 2019-03-18 13:28:31
您需要将%w用于一周中的一天-- explanation与%W用于一周:
http://strftime.org/ for %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-25https://stackoverflow.com/questions/55222420
复制相似问题