Python实现年-周转换为对应周的首尾日期
解决方案
可以用 pandas 结合日期格式化实现需求,核心是利用周规则将Year&Week转换为对应周一的日期,再推导周日的日期:
步骤1:构造原始DataFrame
先还原初始数据:
import pandas as pd # 原始数据 data = { "Year&Week": ["2022-50", "2022-51", "2022-52"], "年份": [2022, 2022, 2022], "周数": [50, 51, 52] } df = pd.DataFrame(data)
步骤2:计算周起始日(周一)和结束日(周日)
利用pandas.to_datetime解析周格式,再通过日期偏移计算结束日:
# 将Year&Week转换为对应周的周一 df["周起始日"] = pd.to_datetime(df["Year&Week"] + "-1", format="%Y-%W-%w") # 周结束日为起始日加6天 df["周结束日"] = df["周起始日"] + pd.Timedelta(days=6) # 格式化为要求的DD/MMM/YYYY格式(月份为英文缩写) df["周起始日"] = df["周起始日"].dt.strftime("%d/%b/%Y") df["周结束日"] = df["周结束日"].dt.strftime("%d/%b/%Y")
最终结果
运行后得到的DataFrame与需求格式完全匹配:
| Year&Week | 年份 | 周数 | 周起始日 | 周结束日 |
|---|---|---|---|---|
| 2022-50 | 2022 | 50 | 12/Dec/2022 | 18/Dec/2022 |
| 2022-51 | 2022 | 51 | 19/Dec/2022 | 25/Dec/2022 |
| 2022-52 | 2022 | 52 | 26/Dec/2022 | 01/Jan/2023 |
补充说明
- 解析格式
%Y-%W-%w中,%W代表周数,-1指定周一为一周起始;若需严格遵循ISO周规则,可改用%G-%V-%u格式:pd.to_datetime(df["Year&Week"] + "-1", format="%G-%V-%u"),结果一致。 strftime("%d/%b/%Y")用于将日期转为指定格式,%b会生成英文月份缩写(如Dec、Jan)。
内容的提问来源于stack exchange,提问作者exenlediatán
相关产品推荐
相关产品推荐

