You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从pandas的Datetime类型列提取年、月、周数据并解决KeyError报错

问题原因

调用groupby(["Week"]).sum()时,分组键Week默认会成为结果DataFrame的索引,不会保留为普通列,所以直接通过df_all_sales['Week']取列会抛出KeyError。


解决方法

方法1:直接从Datetime类型索引提取属性

df_all_sales的索引本身就是datetime64类型的周数据,直接调用索引的时间属性即可:

# 提取年份
df_all_sales['year'] = df_all_sales.index.year
# 提取月份
df_all_sales['month'] = df_all_sales.index.month
# 提取一年中的第几周
df_all_sales['week_of_year'] = df_all_sales.index.isocalendar().week

方法2:分组时保留Week为普通列

如果希望后续直接把Week当列操作,分组时添加as_index=False参数即可:

# 分组时指定as_index=False,分组键不会转为索引
df_all_sales = df.groupby(["Week"], as_index=False).sum()
# 之后就可以正常用dt属性操作Week列
df_all_sales['year'] = df_all_sales['Week'].dt.year
df_all_sales['month'] = df_all_sales['Week'].dt.month
df_all_sales['week_of_year'] = df_all_sales['Week'].dt.isocalendar().week

方法3:将已有索引重置为普通列

如果已经完成分组不想重新计算,可以调用reset_index()把索引转回普通列:

df_all_sales = df_all_sales.reset_index()
# 之后就可以正常取Week列操作
df_all_sales['year'] = df_all_sales['Week'].dt.year

内容的提问来源于stack exchange,提问作者Shreya Adhvaryyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:45:02