You need to enable JavaScript to run this app. 使用Pandas按日期范围过滤数据结果不符合预期,遗漏了什么?
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas按日期范围过滤数据结果不符合预期,遗漏了什么?

错误原因
  • 你当前使用字符串格式的日期做大小比较,字符串比较逻辑是逐字符比对ASCII编码,不会按照实际日期的先后顺序判断,例如10/01/2021与4/29/2021比较时,首字符1的ASCII码小于4,会被误判为更早的日期,直接导致过滤结果不符合预期。
  • 读取CSV文件时没有将collectedDate字段转换为日期类型,Pandas默认会将该字段识别为字符串(object)类型,不支持日期维度的逻辑比较。
修复方案

修改核心点为:将参与比较的collectedDate字段和阈值日期统一转为datetime类型,使用日期逻辑做过滤。
修复后完整代码如下:

# -*- coding: utf-8 -*-
import pandas as pd
import sys
from dateutil.relativedelta import relativedelta
import datetime

reload(sys)
sys.setdefaultencoding('utf-8')

today = datetime.date.today()
three_mon_rel = relativedelta(months=-3)
# 保留datetime类型,无需转为字符串
three_months_period = today + three_mon_rel

# 读取CSV时直接将collectedDate解析为日期类型,匹配你使用的月/日/年格式
data = pd.read_csv(
    'output.csv',
    parse_dates=['collectedDate'],
    date_format='%m/%d/%Y'
)

# 此时比较按真实日期先后逻辑判断,结果符合预期
rslt_df = data[data['collectedDate'] >= three_months_period]
print(rslt_df)

注:如果你使用的是Pandas 2.0以下版本,可将读取CSV时的date_format参数替换为date_parser=lambda x: pd.to_datetime(x, format='%m/%d/%Y')即可正常运行。

内容的提问来源于stack exchange,提问作者Ernesto CD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 23:09:02