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

Pandas删除2019年索引行报错KeyError,求解决方案

如何删除Pandas日期索引DataFrame中2019年的所有行?

问题描述

我有一个以日期为索引的Pandas DataFrame,数据时间范围为2017-01-01至2019-12-31。想要删除所有年份为2019的行,执行代码df_raw1 = df_raw1.drop(index=['2019'])时触发KeyError,错误信息如下:

KeyError                                  Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_15244\372933074.py in <module>
----> 1 df_raw1 = df_raw1.drop(index=['2019'])


KeyError: "['2019'] not found in axis"

问题原因

drop(index=['2019'])会直接查找索引值等于字符串'2019'的行,但你的索引是日期时间类型(datetime),不存在值为'2019'的索引,因此触发KeyError。

正确实现方式

有几种可靠的方法可以筛选掉2019年的行:

  • 利用DatetimeIndex的year属性筛选
    直接通过索引的年份属性反向筛选,保留非2019年的行:

    df_raw1 = df_raw1[df_raw1.index.year != 2019]
    
  • 使用loc结合日期范围筛选
    通过指定日期范围,选取2017-01-01到2018-12-31的行:

    df_raw1 = df_raw1.loc[:'2018-12-31']
    

    或者明确起止范围:

    df_raw1 = df_raw1.loc['2017-01-01':'2018-12-31']
    
  • 使用drop配合布尔索引
    先获取2019年行的索引,再批量删除:

    to_drop = df_raw1[df_raw1.index.year == 2019].index
    df_raw1 = df_raw1.drop(to_drop)
    

额外提示

如果你的索引还未转换为datetime类型,需要先执行转换:

df_raw1.index = pd.to_datetime(df_raw1.index)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:47:48