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

