如何从含日期列的文件中动态筛选早于当前日期减2年的所有日期
动态筛选2年以上历史日期的实现方案
以下提供3种常用场景下的实现方法:
Excel 实现方案
- 动态基准日期核心公式:
=EDATE(TODAY(),-24),该值会随系统当前日期自动更新,无需手动修改 - 操作步骤:
- 在日期列旁新增空白列,表头命名为是否符合筛选条件
- 第二行输入公式:
=A2<EDATE(TODAY(),-24),将A2替换为你日期列的第一个数据单元格 - 下拉公式填充所有行,返回
TRUE的即为符合要求的行 - 对新增列筛选
TRUE值即可导出目标结果
注意:如果日期列是文本格式,需要先右键设置单元格格式为日期类型,否则公式会计算错误
Python Pandas 实现方案
- 先计算动态基准日期:
import pandas as pd from datetime import datetime # 需处理闰年的话可以用dateutil库更精准 from dateutil.relativedelta import relativedelta two_years_ago = datetime.today() - relativedelta(years=2)
- 读取文件并筛选:
# 支持csv、excel等常见格式 df = pd.read_csv("你的文件路径.csv") # 转换日期列为时间类型 df["日期列名"] = pd.to_datetime(df["日期列名"]) # 筛选符合条件的行 result_df = df[df["日期列名"] < two_years_ago] # 导出结果 result_df.to_csv("筛选结果.csv", index=False)
Linux Shell 实现方案(处理csv场景)
- 用系统date命令生成动态基准,结合awk快速筛选:
# 生成YYYY-MM-DD格式的2年前基准日期 benchmark=$(date -d "2 years ago" +%Y-%m-%d) # 假设日期在csv第3列,保留表头筛选符合条件的行 awk -F ',' -v bench="$benchmark" 'NR==1 || $3 < bench' 源文件.csv > 筛选结果.csv
注意:如果你的日期格式不是YYYY-MM-DD,需要先统一格式再做比较,避免字符串顺序比较出错
内容的提问来源于stack exchange,提问作者Mourad Boulkroune
相关产品推荐
相关产品推荐

