如何用Pandas date_range生成指定起始日的月度日期序列?
生成指定起始日的月度日期范围
要生成以固定日期(如每月13号)为基准的月度日期序列,你可以用以下几种实用方法:
方法1:基于月初日期偏移
利用MS(每月初)频率生成日期,再偏移12天得到当月13号,同时确保结果不超过结束日期:
import pandas as pd start = '13/04/2024' end = '13/06/2024' # 转换为datetime对象,dayfirst=True适配日/月/年格式 start_dt = pd.to_datetime(start, dayfirst=True) end_dt = pd.to_datetime(end, dayfirst=True) # 生成每月初的日期,偏移12天得到当月13号 month_starts = pd.date_range(start=start_dt.replace(day=1), end=end_dt.replace(day=1), freq='MS') target_dates = month_starts + pd.DateOffset(days=12) # 过滤超出结束日期的结果 target_dates = target_dates[target_dates <= end_dt] print(target_dates)
输出:
DatetimeIndex(['2024-04-13', '2024-05-13', '2024-06-13'], dtype='datetime64[ns]', freq=None)
方法2:循环添加月份偏移
直接通过循环给起始日期逐个添加月份偏移,逻辑更直观,适配特殊起始日(如31号)的自动调整:
import pandas as pd start = '13/04/2024' end = '13/06/2024' start_dt = pd.to_datetime(start, dayfirst=True) end_dt = pd.to_datetime(end, dayfirst=True) # 计算需要生成的总月份数 total_months = (end_dt.year - start_dt.year) * 12 + (end_dt.month - start_dt.month) + 1 # 逐个生成目标日期 target_dates = pd.DatetimeIndex([start_dt + pd.DateOffset(months=i) for i in range(total_months)]) print(target_dates)
如果起始日是31号这类小月不存在的日期,pandas会自动调整到对应月份的最后一天,适合通用场景。
内容的提问来源于stack exchange,提问作者praveen jp
相关产品推荐
相关产品推荐

