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

如何使用pandas.offsets.MonthBegin获取时间戳所在月的月初时刻

问题解答

a. 更简洁的实现方式

直接用 pandas 内置的周期转换接口即可一步得到结果:

# 列表推导写法
result = [ts.to_period('M').start_time for ts in stamps]

# 矢量化批量处理写法(适合数据量较大的场景)
import pandas as pd
stamp_series = pd.Series(stamps)
result = stamp_series.dt.to_period('M').dt.start_time

上述代码会直接输出你需要的当月月初零点结果,不需要多次叠加偏移量,时区信息也会完整保留。

b. MonthBegin的行为说明

你观察到的是MonthBegin的设计预期行为,并非bug。
MonthBegin属于pandas的锚定偏移类,核心逻辑是:

  • 给时间戳加偏移量时,默认向「未来方向」对齐到最近的月初锚点
  • 参数n代表对齐后再跳转的月初次数:
    • 用n=0时:如果当前日期不是当月1号,会直接对齐到下一个月的月初,这就是1月27号的时间戳得到2月结果的原因
    • 用n=1时:不管当前是不是月初,都会对齐到下一个月的月初,所以三个测试用例全部得到2月结果

如果一定要用MonthBegin实现需求,可以用它内置的rollback方法向前对齐,写法也比两次叠加偏移简单:

result = [pd.offsets.MonthBegin().rollback(ts.floor('D')) for ts in stamps]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:06:04