如何让Pandas将W_2022_27格式年周数据识别为%yyyy-%m日期?
用Pandas将W_YYYY_WW格式转换为YYYY-MM日期类型
核心思路
先从W_2022_27这类字符串中提取年份和周数,再通过Pandas的to_datetime解析为日期对象,最后格式化为YYYY-MM格式。
步骤与代码示例
假设你的DataFrame列名为week_column,具体操作如下:
- 提取年份和周数并格式化
先去掉前缀W_,再将年份和周数拼接为YYYY-WW格式:
import pandas as pd # 示例数据 df = pd.DataFrame({'week_column': ['W_2022_27', 'W_2023_05', 'W_2021_52']}) # 提取年份和周数,转为YYYY-WW格式 df['year_week'] = df['week_column'].str.replace('W_', '').str.replace('_', '-')
- 解析为日期对象
根据你的周数规则选择对应的格式符:
- 若以周日为一周起始,用
%Y-%W:# 解析为该周的周一日期(weekday=0表示周一,可改为6取周日) df['date'] = pd.to_datetime(df['year_week'], format='%Y-%W', weekday=0) - 若遵循ISO标准(周一为一周起始),用
%G-%V:df['date'] = pd.to_datetime(df['year_week'], format='%G-%V', weekday=0)
- 格式化为YYYY-MM
将日期对象转为目标格式:
df['month'] = df['date'].dt.strftime('%Y-%m')
处理特殊情况
如果周数是单数字(如W_2022_7),需要补零确保格式统一:
# 提取年份和周数,补零后拼接 df['year_week'] = df['week_column'].str.extract(r'W_(\d{4})_(\d{1,2})').apply( lambda x: f"{x[0]}-{x[1].zfill(2)}", axis=1 )
最终结果示例
处理后DataFrame会包含解析后的日期和目标月份列:
| week_column | year_week | date | month |
|---|---|---|---|
| W_2022_27 | 2022-27 | 2022-07-04 | 2022-07 |
| W_2023_05 | 2023-05 | 2023-02-06 | 2023-02 |
| W_2021_52 | 2021-52 | 2021-12-27 | 2021-12 |
内容的提问来源于stack exchange,提问作者v s
相关产品推荐
相关产品推荐

