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

使用Python Pandas DateOffset无法正确获取月末日期的问题求助

月度时间序列遍历中的月末日期截断问题

我有一个月度级别的时间序列DataFrame,其中每个月以月末日期标识。我需要逐步遍历DataFrame,以获取不同时间段的预测数据。尝试了以下代码:

import pandas as pd
from pandas.tseries.offsets import DateOffset
import numpy as np

times = np.arange(1,24)
for time in times:
    date_min = pd.to_datetime("2020-11-30")
    offset_ = int(time)
    filter_ = date_min + DateOffset(months = offset_)
    df_ = df[(df['dmand_yr_mo'] <= filter_)]

这段代码运行无报错,但从11月切换到12月时,得到的日期是2020-12-30而非2020-12-31,出现日期截断问题。


解决方法

使用MonthEnd偏移量替代DateOffset

DateOffset(months=N)是基于当前日期的数值偏移,当原日期是30号时,偏移到有31天的月份时会停在30号(它只会简单增加N个月,不会自动调整到月末)。而MonthEnd偏移量会直接定位到目标月份的最后一天,完美解决日期截断问题。

修正后的代码:

import pandas as pd
from pandas.tseries.offsets import MonthEnd
import numpy as np

times = np.arange(1,24)
for time in times:
    date_min = pd.to_datetime("2020-11-30")
    offset_ = int(time)
    filter_ = date_min + MonthEnd(offset_)
    df_ = df[(df['dmand_yr_mo'] <= filter_)]

额外优化:减少重复初始化

可以把date_min移到循环外,避免每次循环重复创建同一个日期对象:

import pandas as pd
from pandas.tseries.offsets import MonthEnd
import numpy as np

date_min = pd.to_datetime("2020-11-30")
times = np.arange(1,24)
for offset_ in times:
    filter_ = date_min + MonthEnd(offset_)
    df_ = df[(df['dmand_yr_mo'] <= filter_)]
    # 此处添加你的预测处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:01:55