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

pandas调用drop删DataFrame行报KeyError: '[17] not found in axis'

DataFrame按索引删行触发KeyError: '[17] not found in axis'问题解决

报错原因

当前写的遍历删除逻辑存在两个致命问题,直接导致索引找不到的报错:

  • 遍历初始拿到的索引范围是DataFrame最开始的长度,但是每执行一次删除操作,DataFrame的总行数就会减少,原有行索引不会自动重置,当循环走到i=17时,索引为17的行要么已经在之前的删除操作中被移除,要么当前表内根本不存在对应索引值,自然触发找不到轴上索引的错误。
  • drop()方法默认不会修改原DataFrame,只会返回删除后的新对象,当前写法就算不报错,原变量tweets_df1也不会发生任何变化。

可行解决方案

不要用逐行遍历+循环删除的写法,pandas做行筛选直接用布尔索引一次性处理即可,效率更高也不会出现索引错位问题。

最简实现(直接筛除目标行)

# 保留所有Text列不包含https的行,覆盖原变量
tweets_df1 = tweets_df1[~tweets_df1['Text'].str.contains('https')]

需要打印被删行索引的实现

如果需要保留打印被删行索引的逻辑,可以先定位所有待删除行再统一操作:

# 标记所有包含https的待删除行
delete_mask = tweets_df1['Text'].str.contains('https')
# 提取待删除行的索引并打印
for del_idx in tweets_df1[delete_mask].index:
    print(del_idx)
# 一次性删除所有目标行
tweets_df1 = tweets_df1.drop(index=tweets_df1[delete_mask].index, axis=0)

说明:代码中str.contains('https')是pandas内置的字符串匹配方法,比逐行遍历调用find()的执行效率高很多,符号~是布尔取反操作,代表筛选不符合匹配规则的行。给出的包含链接文本的样例行,会被该逻辑准确识别并筛除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:31:02