假设您有%Y%U
格式的日期,例如202101
(2021年,第1周),并且您希望使用pd.to_datetime
将其转换为常规日期,例如2021-01-04
我想看看是否有更好的方法来处理53周的年份。考虑以下内容:
from datetime import date
import pandas as pd
df = pd.DataFrame({'week':['202053','202101']})
这是我想要的
print(date.fromisocalendar(2020,53,1), date.fromisocalendar(2021,1,1))
2020-12-28 2021-01-04
这是熊猫会做的,我相信这是因为熊猫希望第53周被认为是明年的第0周
print(pd.to_datetime(df.week.astype(str)+'1', format='%Y%W%w').tolist())
[Timestamp('2021-01-04 00:00:00'), Timestamp('2021-01-04 00:00:00')]
所以我可以输入
df['week'] = np.where(df['week'].str.endswith('53'), (df['week'].astype(int)+47).astype(str),df['week'])
print(pd.to_datetime(df.week.astype(str)+'1', format='%Y%W%w').tolist())
[Timestamp('2020-12-28 00:00:00'), Timestamp('2021-01-04 00:00:00')]
所以我可以在任何以53结尾的日期加上47周,我得到了我所期望的。这是一种非常迂回的方法。
是否有更标准的方法来处理这个?
既然你用的是date.fromisocalendar(2020,53,1)
,那么你可以试试
df['week_'] = pd.to_datetime(df['week']+'1', format='%G%V%w')
,
%G
: ISO 8601年份,世纪表示包含ISO周(%V)大部分的年份。%V
: ISO 8601将周表示为十进制数,星期一作为一周的第一天。第01周为1月4日所在的星期。%w
:工作日为十进制数,其中0为星期日,6为星期六。
print(df)
week week_
0 202053 2020-12-28
1 202101 2021-01-04