如何基于Date列创建YYYY-WW格式的datetime64类型YrWeek列
解决方案:生成YYYY-WW格式的datetime64类型列
先修正日期转换的基础代码
你第一步的代码缺少引号,正确的日期转换写法如下:
import pandas as pd df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
可行方案:生成对应周的datetime值
datetime64类型本质存储的是具体时间戳,无法直接存储"YYYY-WW"这种周标识,但我们可以生成每周的代表日期(比如每周一),同时设置显示格式为YYYY-WW,既满足类型要求,又符合视觉展示需求。
方法1:基于ISO周标准生成每周一的datetime
# 获取ISO年、周数,拼接成"年-周-周一"的字符串后转datetime df['YrWeek'] = pd.to_datetime( df['Date'].dt.isocalendar().astype(str).agg('-'.join, axis=1) + '-1', format='%G-%V-%u' ) # 设置显示格式为YYYY-WW(%V对应ISO周数) pd.options.display.date_format = '%Y-%V'
isocalendar()返回ISO标准的年、周、星期几%G对应ISO周年,%V对应ISO周数,%u代表星期几(1=周一),确保转换后的datetime是该周的第一天
方法2:利用周期转换快速生成
# 转换为以周一为起始的周周期,再取周期的起始时间(即每周一) df['YrWeek'] = df['Date'].dt.to_period('W-MON').dt.start_time # 设置显示格式为YYYY-WW pd.options.display.date_format = '%Y-%V'
W-MON指定周周期以周一为起始,start_time返回该周期的起始datetime
你之前尝试失败的原因
dt.to_period('M')生成的是月周期,和周需求不匹配- 使用
format='%Y-%w'是错误的:%w代表一周中的第几天(0=周日到6=周六),不是周数,导致转换失败返回NaT
内容的提问来源于stack exchange,提问作者1cjtc jj
相关产品推荐
相关产品推荐

