如何过滤移除dataframe中距系统运行日期不足90天的行
解决方案
针对50万行级别的DataFrame,优先使用pandas向量化操作实现需求,执行效率远高于逐行遍历的实现方式。
前置依赖
需要导入的库:
import pandas as pd from datetime import datetime
完整实现步骤
- 第一步:日期列格式转换,样例中的日期为
日/月/年格式,明确指定解析格式既可以避免pandas自动识别出错,也能提升转换效率
# 假设你的原始DataFrame变量名为df,日期列列名和样例一致为`Date.` df['Date.'] = pd.to_datetime(df['Date.'], format='%d/%m/%y')
- 第二步:过滤符合要求的行,仅保留日期距离当前系统时间大于等于90天的行
# 获取代码运行时的系统时间 current_time = datetime.now() # 计算时间差过滤数据 df_filtered = df[ (current_time - df['Date.']).dt.days >= 90 ]
低内存优化方案
如果需要直接修改原DataFrame降低内存占用,可以使用如下写法:
current_time = datetime.now() # 先定位需要删除的行索引 drop_index = df[ (current_time - df['Date.']).dt.days < 90 ].index df.drop(drop_index, inplace=True)
效果验证
以你提供的样例数据为例:
| Name | Date. |
|---|---|
| Tom | 16/07/20 |
| Dave | 10/04/21 |
如果代码运行时间为2021年5月1日,Dave的日期距离当前时间仅21天,会被直接删除,最终仅保留Tom对应的行。
内容的提问来源于stack exchange,提问作者David Cook
相关产品推荐
相关产品推荐

