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

如何从DataFrame中获取最近日期往前推三天的行数据

问题描述

我有如下DataFrame df:

Reference Number        Date             Time                  
36566             5221  2022-09-12  16:26:11.359962  
36565             5220  2022-09-12  16:24:30.494203  
34773             5218  2022-09-11  14:44:41.524015  
34781             5218  2022-09-11  14:44:41.524015  
34780             5218  2022-09-11  14:44:41.524015  
...                ...         ...              ...           
94                5001  2022-05-12  12:14:20.100192    
95                5001  2022-05-12  12:14:20.100192    
96                5001  2022-05-12  12:14:20.100192    
97                5001  2022-05-12  12:14:20.100192    
4                 5000  2022-05-12  12:08:11.946828    

其中Date列的类型为 <class 'datetime.date'>,我需要筛选出最近日期往前推三天内的记录(比如示例中要获取2022-09-10至2022-09-12的数据)。执行以下代码时出现报错:

print("last day",df['Date'].iloc[-1]-datetime.timedelta(days=3))

报错信息:

type object 'datetime.datetime' has no attribute 'timedelta'

解决方案

1. 修复timedelta报错问题

报错根源是datetime模块的导入方式错误:

  • 如果你用的是from datetime import datetime,那么timedelta是独立于datetime.datetime的类,需要单独导入;如果是导入整个datetime模块,才能用datetime.timedelta。

两种可行的修复方式:

  • 方式一:同时导入datetime和timedelta
from datetime import datetime, timedelta
# 后续使用
print("三天前日期", df['Date'].iloc[-1] - timedelta(days=3))
  • 方式二:导入整个datetime模块
import datetime
# 后续使用
print("三天前日期", df['Date'].iloc[-1] - datetime.timedelta(days=3))

2. 筛选目标日期区间的数据

注意:不要直接用df['Date'].iloc[-1]获取最新日期,因为DataFrame的行不一定是按日期排序的,取最大值才是最可靠的方式。完整代码如下:

from datetime import timedelta

# 获取DataFrame中的最新日期
latest_date = df['Date'].max()
# 计算三天前的日期
three_days_prior = latest_date - timedelta(days=3)

# 筛选日期在[三天前, 最新日期]之间的行
filtered_data = df[(df['Date'] >= three_days_prior) & (df['Date'] <= latest_date)]

执行后filtered_data就是你需要的最近三天的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:05:32