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
相关产品推荐
相关产品推荐

