Python日期格式转换:YYYYWW格式转DD/MM/YYYY
处理DataFrame中YYYYWW格式日期转换
要把DataFrame里YYYYWW格式的周数据转成标准日期格式(比如dd/mm/yyyy或dd-mm-yyyy),可以用以下两种实用方法:
方法1:用pandas直接解析(推荐)
利用pandas.to_datetime,通过指定格式字符串并补充星期几的标识,就能快速完成转换:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'year_week': ['202310', '202320', '202401']}) # 转成日期,默认取每周一(%W代表周一为周起始的周数,%w=1对应周一) df['date'] = pd.to_datetime(df['year_week'] + '1', format='%Y%W%w') # 格式化为dd/mm/yyyy df['formatted_date'] = df['date'].dt.strftime('%d/%m/%Y')
如果你的周数是按周日为起始定义的,就换成%U格式,补充0取每周日:
df['date_sunday'] = pd.to_datetime(df['year_week'] + '0', format='%Y%U%w')
方法2:手动计算日期(更灵活)
如果需要自定义周起始或特殊逻辑,可以拆分年份和周数,用datetime模块计算:
from datetime import datetime, timedelta def yw_to_date(yw_str, week_start='mon'): year = int(yw_str[:4]) week = int(yw_str[4:]) first_day = datetime(year, 1, 1) # 调整到当年第一周的起始日 if week_start == 'mon': offset = (first_day.weekday() - 0) % 7 start_of_year = first_day - timedelta(days=offset) else: offset = (first_day.weekday() - 6) % 7 start_of_year = first_day - timedelta(days=offset) # 计算目标周的起始日 target_date = start_of_year + timedelta(weeks=week-1) return target_date # 应用到DataFrame df['date'] = df['year_week'].apply(yw_to_date) # 格式化为dd-mm-yyyy df['formatted_date'] = df['date'].dt.strftime('%d-%m-%Y')
关键注意点
- 周数定义匹配:
%W对应ISO标准周(周一为起始,第1周包含1月4日),%U是周日起始(第1周包含1月1日),一定要和你的数据周定义对应。 - 数据类型处理:如果
year_week列是数字类型,先转成字符串:df['year_week'] = df['year_week'].astype(str)。
内容的提问来源于stack exchange,提问作者Rob Kingdom
相关产品推荐
相关产品推荐

