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

pd.date_range()的inclusive参数使用误区及预期序列生成方案

问题解答

1. 生成预期的每月首日序列

核心是选对日期频率,要生成每月首日,需使用freq="MS"(Month Start,代表每月第一天的频率),而非你之前用的freq="M"(Month End,代表每月最后一天的频率)。

方案一:直接指定首尾首日区间

import pandas as pd

# 生成2020-01-01到2022-12-01的每月首日序列
date_series = pd.date_range(start='2020-01-01', end='2022-12-01', freq='MS')

默认inclusive="both"会自动包含首尾两个边界日期,完全符合预期输出。

方案二:保留原end日期参数

如果坚持使用end='31/12/2022',freq="MS"也会自动生成不超过该日期的所有每月首日,结果同样包含2022-12-01:

date_series = pd.date_range(start='2020-01-01', end='31/12/2022', freq='MS')

2. 对inclusive参数的误解

你之前的代码问题根源是选错了freq,但对inclusive的功能也存在几个关键误解:

  • inclusive只作用于序列内的边界日期:它不会改变freq的生成逻辑(比如把末日序列改成首日序列)。你用freq="M"生成的是每月末日,而start='01/01/2020'是首日,根本不在这个序列里,所以inclusive="left"无法让序列包含该日期。
  • inclusive不改变日期类型:它只是在freq生成的完整序列基础上,决定是否保留start和end这两个点(前提是这两个点属于该序列)。比如你用freq="M"且end='31/12/2022',这个end是序列中的2022-12-31,inclusive="left"会排除这个点,导致你看不到12月的记录,但这和你要的首日序列需求无关。
  • 忽略了边界日期与freq的匹配性:使用inclusive时,需要确保start和end是freq序列中的有效日期,否则参数无法起到你期望的边界控制作用。比如要生成首日序列,start和end应该是某月的第一天,这样inclusive才能正确控制是否包含它们。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:31:12