You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas dataframe日期区间筛选报错及结果异常问题求解

问题原因分析
  • 第一种写法报错原因:
    1. pandas布尔索引的逐元素逻辑运算需要用位运算符&,不能用Python原生的and,and会尝试将整个布尔序列转换为单个布尔值,触发ValueError。
    2. 你设置的时间索引是edate列,但第一种写法中比较的是date字段,同时使用的日/月/年格式的日期字符串存在解析歧义,容易被pandas识别为月/日/年格式,导致筛选逻辑出错。
  • 第二种写法返回异常数据原因:
    你读取文件时仅指定了parse_dates=['date'],作为索引的edate列没有被解析为datetime类型,仍为字符串格式。使用loc[起始字符串:结束字符串]切片时,pandas会按字符串字典序而非日期逻辑比较,例如12/09/1965的字符串开头12小于14/09/2014的开头14,就会被误纳入筛选结果。
正确解决方法

首先修正数据读取逻辑,保证索引为datetime类型:

# 读取时同时解析date和edate列为datetime类型,将edate设为索引
df = pd.read_csv('https://manifestoproject.wzb.eu/down/data/2020b/datasets/MPDataset_MPDS2020b.csv', parse_dates=['date', 'edate'], index_col='edate')

之后可选择任意一种方式筛选:

  1. 布尔索引写法(兼容性更高,适合复杂筛选条件)
start = pd.to_datetime('2014-09-14')
end = pd.to_datetime('2020-09-30')
df = df.loc[(df.index >= start) & (df.index <= end)]

注意:每个判断条件需要用括号包裹,避免运算符优先级错误

  1. 时间索引切片写法(更简洁)
    确认索引为datetime类型后,直接传入标准年-月-日格式的日期字符串即可:
df = df.loc['2014-09-14':'2020-09-30']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:45:03