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

如何在Pandas中从datetime类型日期同时提取年份和月份?

解决Pandas按年月分组分析月度表现的问题

嘿,我完全懂你这个痛点——既要按月份追踪产品表现,又不能把不同年份的同月数据混在一起,单独按年或月分组都满足不了需求对吧?别担心,用Pandas有好几种简单的方法能实现你要的YYYY-MM格式分组,给你详细拆解:

方法1:直接转成年月周期(最推荐)

Pandas的dt.to_period()方法可以直接把datetime列转换成年月周期类型,显示出来就是2018-07这种格式,分组时会自动把同年同月的数据归为一组:

import pandas as pd

# 假设你的DataFrame名为df,日期列是'date'
df['year_month'] = df['date'].dt.to_period('M')

# 按年月分组聚合,比如计算月度销量总和(假设指标列是'sales')
monthly_performance = df.groupby('year_month')['sales'].sum().reset_index()

这个方法的好处是保留了时间的周期属性,后续做时间序列分析或排序时会更顺手,不用担心字符串排序出问题。

方法2:拼接年和月字符串(适合需要纯文本格式的场景)

如果你需要的是字符串类型的YYYY-MM,可以提取年份和月份后拼接,记得给月份补零保证格式统一:

# 提取年份转字符串,提取月份转字符串并补零到两位
df['year_month'] = df['date'].dt.year.astype(str) + '-' + df['date'].dt.month.astype(str).str.zfill(2)

# 同样进行分组聚合操作
monthly_performance = df.groupby('year_month')['sales'].sum().reset_index()

str.zfill(2)是关键,它能把1-9月的数字转换成01-09,避免出现2018-7这种不规范的格式,保证后续分组和可视化的一致性。

方法3:用strftime格式化日期(最直观的字符串生成法)

直接利用datetime的格式化方法strftime(),指定%Y-%m格式就能得到你想要的结果:

# 格式化日期为YYYY-MM字符串
df['year_month'] = df['date'].dt.strftime('%Y-%m')

# 分组聚合
monthly_performance = df.groupby('year_month')['sales'].sum().reset_index()

这个方法最直观,熟悉日期格式化语法的话一眼就能看懂,生成的是标准的文本格式,适合直接用于图表的轴标签。

小提示:制图时的注意事项

不管用哪种方法生成year_month列,制图时直接把它作为x轴即可。如果是用周期类型的列,Pandas和可视化库会自动识别时间顺序;如果是字符串列,只要你的数据是按时间顺序采集的,分组后的结果也会保持正确的顺序,不用担心图表上的年月乱序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:51:34