如何用Python筛选距今日90天范围内的日期数据
筛选Python数据集中过去90天的记录
下面分两种常用场景给你解决方案,都是基于datetime和timedelta的基础用法:
方法一:用Pandas处理表格数据(推荐)
如果你的数据集是表格形式(比如CSV、Excel或者你给出的这种结构化数据),用Pandas处理最方便高效:
from datetime import date, timedelta import pandas as pd # 先把你的数据集转成DataFrame data = { "ID": [1, 2, 3], "Date": ["12/11/2021", "2/12/2022", "3/02/2023"], "Employed?": ["Y", "Y", "Y"] } df = pd.DataFrame(data) # 关键:把字符串格式的Date列转成datetime类型 # 你的日期格式是「月/日/年」,所以指定format='%m/%d/%Y'避免解析错误 df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y') # 计算90天前的日期 ninety_days_ago = date.today() - timedelta(days=90) # 用布尔索引筛选符合条件的记录 filtered_df = df[df['Date'] >= ninety_days_ago] # 输出结果 print(filtered_df)
运行后就会得到你想要的仅包含最近90天记录的表格。
方法二:原生Python处理小型数据集
如果不用Pandas,用原生列表/字典也能实现:
from datetime import date, timedelta from datetime import datetime # 原始数据集(列表嵌套字典) data = [ {"ID": 1, "Date": "12/11/2021", "Employed?": "Y"}, {"ID": 2, "Date": "2/12/2022", "Employed?": "Y"}, {"ID": 3, "Date": "3/02/2023", "Employed?": "Y"} ] ninety_days_ago = date.today() - timedelta(days=90) filtered_data = [] # 遍历每条记录,筛选符合条件的 for record in data: # 把字符串日期转成date对象 record_date = datetime.strptime(record['Date'], '%m/%d/%Y').date() if record_date >= ninety_days_ago: filtered_data.append(record) # 打印筛选后的结果 for item in filtered_data: print(f"ID: {item['ID']}, Date: {item['Date']}, Employed?: {item['Employed?']}")
重要注意点
- 日期格式匹配:一定要保证
strptime或pd.to_datetime的format参数和你的日期字符串格式一致。比如你的例子是「月/日/年」,用%m/%d/%Y;如果是「日/月/年」就要改成%d/%m/%Y,否则会解析出错。 - 时区问题:如果你的数据里的日期包含时区信息,要先统一时区再做比较(比如转成UTC或者本地时区),避免日期比较出现偏差。
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

