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

如何用Pandas获取指定格式的前3天日期列表?

获取过去3天(不含今日)日期的解决方案

嘿,我看你在尝试用pandas获取过去3天的日期时遇到了几个小问题,我来帮你梳理下正确的做法,顺便解释下之前的错误原因:

可行方案一:用end参数反向生成日期

我们需要的是昨天、前天、大前天这三天,所以可以把结束时间设为昨天,然后往前取3天:

import pandas as pd

# 先拿到今日凌晨的日期(去掉时分秒,避免时间部分干扰)
today = pd.Timestamp.today().normalize()
# 生成从3天前到昨天的日期序列,一共3天
date_range = pd.date_range(end=today - pd.Timedelta(days=1), periods=3)
# 把Timestamp对象转成你要的YYYYMMDD格式字符串
datelist = [date.strftime('%Y%m%d') for date in date_range]
print(datelist)
# 输出示例:['20180130','20180129','20180128']

可行方案二:直接指定起始和结束日期

如果你觉得反向生成有点绕,也可以明确指定起始(3天前)和结束(昨天)日期:

import pandas as pd

today = pd.Timestamp.today().normalize()
start_date = today - pd.Timedelta(days=3)
end_date = today - pd.Timedelta(days=1)
date_range = pd.date_range(start=start_date, end=end_date)
datelist = [date.strftime('%Y%m%d') for date in date_range]
print(datelist)

为什么之前的方法行不通?

  • 你用periods=-3时,pd.date_range需要配合start参数才能正确生成过去的日期,单独以当前时间为起始的话,负数periods会找不到有效日期范围,所以返回空列表。
  • pd.datetime.today()返回的是Python原生的datetime对象,不能直接和整数相减,得用pandas的Timedelta来做日期偏移,或者先转成Timestamp对象再运算(就像上面的方案里那样)。

另外,用normalize()把时间转成当日凌晨,能避免当前时分秒对日期判断的影响,确保结果精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:34:34