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

如何从Pandas DatetimeIndex移除日部分?处理年月格式时间数据

移除Pandas DatetimeIndex中的日部分,保留年月格式

嘿,针对你处理年月数据集的需求,我给你两个实用的方法来去掉DatetimeIndex里的日部分,完美保留YYYY-MM的格式:

方法一:转换为PeriodIndex(推荐)

这个方法最适合时间序列操作,因为它会保留时间的周期特性,同时只显示年月信息。

假设你已经得到了带日的DatetimeIndex(比如new_index),只需要一行代码就能转换:

# 把DatetimeIndex转成仅含年月的PeriodIndex
monthly_period_index = new_index.to_period('M')

这样得到的monthly_period_index里的元素就是类似2011-03的周期对象,既保留了时间的可操作性(比如按年月筛选、排序),又没有多余的日部分。

另外补充个小细节:你之前代码里pd.to_datetime(new_dates,format='%Y%m%')的格式参数写错啦,应该改成'%Y-%m'——因为你的new_dates是2011-03这样的字符串,修正后转出来的DatetimeIndex才会正确识别年月。

方法二:转换为字符串格式(适合仅需展示场景)

如果你只是需要把时间显示成YYYY-MM的字符串,不需要时间序列的功能,可以用strftime方法直接格式化:

# 将DatetimeIndex转成YYYY-MM格式的字符串数组
monthly_str_dates = new_index.strftime('%Y-%m')

不过要注意,这样得到的是字符串列表,会失去Pandas时间序列的便捷性,所以更推荐第一种方法。

另外,其实你处理原始日期字符串的步骤可以简化,不用循环,直接用Pandas的str.replace更高效:

# 一步完成字符串替换,替代原来的循环操作
indicator_ccgs['Time period Sortable'] = indicator_ccgs['Time period Sortable'].astype(str).str.replace('00', '-')
# 直接转成PeriodIndex,跳过DatetimeIndex的中间步骤
new_index = pd.to_datetime(indicator_ccgs['Time period Sortable'], format='%Y-%m').to_period('M')

这样代码更简洁,运行效率也更高~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:25:10