使用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
相关产品推荐
相关产品推荐

