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

Python生成未来12个月月初日期及DataFrame的问题求助

生成次月起始的未来12个月初日期并创建DataFrame

问题分析

第一次尝试的错误

循环中计算的next_month没有及时存入列表——append语句写在了循环外部,导致最终列表里只保留了最后一次循环的结果,前11个月份的日期都丢失了。

第二次尝试的错误

直接通过replace(month=xxx)修改月份时,没有处理跨年场景:当累加后的月份超过12时(比如当前是11月,累加3个月得到14月),就会触发ValueError: Month must be in 1..12,因为Python的datetime模块不允许月份超出1-12的合法范围。

修正方案

方案一:用relativedelta循环生成(兼容原生datetime)

import pandas as pd
import datetime as dt
from dateutil.relativedelta import relativedelta

# 获取当前日期
today = dt.date.today()

# 计算次月第一天:先取当月1号,加32天会自动跳到下月,再取1号
first_day_next_month = (today.replace(day=1) + dt.timedelta(days=32)).replace(day=1)

# 生成未来12个月初的日期列表
first_day_next_12_months = []
for i in range(12):
    # 从次月开始,依次累加i个月,relativedelta自动处理跨年
    current_month = first_day_next_month + relativedelta(months=i)
    first_day_next_12_months.append(current_month)

# 创建DataFrame
df = pd.DataFrame({"月初日期": first_day_next_12_months})
print(df)

方案二:用pandas date_range直接生成(更简洁高效)

如果已经在使用pandas,推荐用内置的时间序列生成工具,代码更简洁且不易出错:

import pandas as pd
import datetime as dt

today = dt.date.today()
first_day_next_month = (today.replace(day=1) + dt.timedelta(days=32)).replace(day=1)

# freq='MS'表示每月第一天(Month Start),periods指定生成12个日期
date_range = pd.date_range(start=first_day_next_month, periods=12, freq='MS')
df = pd.DataFrame({"月初日期": date_range})
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:05:03