如何在Python中过滤Excel数据集年份?提取最近20年数据
解决Python按年份过滤Excel数据提取最近20年数据的问题
你的代码存在几个关键问题:
- 语法错误:
pd.read_csv的参数写法混乱,存在多余括号和逗号的错误 - 用固定日期范围
2000-01-01到2020-01-01,这不是最近20年的动态范围;另外你提到是Excel数据集,应该用pd.read_excel而非pd.read_csv(如果是CSV文件可忽略这一点) - 未将
date列转换为日期类型,直接过滤会失效
下面是正确的实现步骤:
步骤1:读取数据并转换日期列
import pandas as pd from datetime import datetime, timedelta # 读取Excel数据(如果是CSV文件替换为pd.read_csv) df = pd.read_excel("你的数据文件.xlsx") # 将date列转换为datetime类型,确保日期过滤逻辑生效 df['date'] = pd.to_datetime(df['date'], errors='coerce') # 移除日期转换失败的无效行(可选) df = df.dropna(subset=['date'])
步骤2:计算动态的最近20年日期范围
不用写死日期,根据当前时间自动计算起始点:
# 获取当前日期 current_date = datetime.now() # 计算20年前的日期,用365.25处理闰年误差 start_date = current_date - timedelta(days=20*365.25)
步骤3:过滤数据
# 筛选date列在起始日期之后的数据 filtered_df = df[df['date'] >= start_date]
可选:验证结果
打印过滤后的日期范围确认效果:
print("过滤后最早日期:", filtered_df['date'].min()) print("过滤后最晚日期:", filtered_df['date'].max())
如果你的需求是固定取最近20个完整年份(比如2004-2024,而非当前日期往前推20年),可以调整起始日期的计算方式:
current_year = datetime.now().year start_year = current_year - 20 start_date = datetime(start_year, 1, 1) filtered_df = df[(df['date'].dt.year >= start_year)]
内容的提问来源于stack exchange,提问作者Olakunle
相关产品推荐
相关产品推荐

