如何用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
相关产品推荐
相关产品推荐

