自动筛选Pandas DataFrame:从最新日期前一天20:01至当日5:59
Pandas日期范围筛选解决方案
步骤1:确保日期列为datetime类型
如果你的TemporaryDateFilter列是字符串格式,必须先转换为datetime类型,否则所有时间计算都会失效:
import pandas as pd final_report['TemporaryDateFilter'] = pd.to_datetime(final_report['TemporaryDateFilter'])
步骤2:定位最新日期
提取数据中最新的日期(仅日期部分,排除时分秒干扰):
latest_date = final_report['TemporaryDateFilter'].dt.date.max()
步骤3:计算目标时间范围
- 起始时间:最新日期前一天的20:01
- 结束时间:最新日期的5:59
# 计算起始时间 start_time = pd.Timestamp(latest_date) - pd.Timedelta(days=1) + pd.Timedelta(hours=20, minutes=1) # 计算结束时间 end_time = pd.Timestamp(latest_date) + pd.Timedelta(hours=5, minutes=59)
步骤4:筛选符合条件的数据
用布尔索引筛选出时间范围内的行:
filtered_data = final_report[ (final_report['TemporaryDateFilter'] >= start_time) & (final_report['TemporaryDateFilter'] <= end_time) ]
关于pd.DateOffset失效的可能原因
- 未将字符串列转换为datetime类型,导致DateOffset无法识别时间格式
- 直接使用
final_report['TemporaryDateFilter'].max()获取完整datetime(包含时分秒),以此计算范围会导致起始/结束时间偏移错误 - DateOffset的参数组合错误(比如误用
months而非days)
内容的提问来源于stack exchange,提问作者martinworkshere
相关产品推荐
相关产品推荐

