You need to enable JavaScript to run this app. Pandas DataFrame分词处理时出现KeyError: 31962报错
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame分词处理时出现KeyError: 31962报错

报错触发原因

你的判断存在偏差:报错根本不是在你给df['clean_tweet']赋值时触发的。对照堆栈的调用链路,错误直接出在循环里的取数行tweet = str(df['clean_tweet'][i]),和后续赋值操作完全无关。
本质是踩了Pandas最常见的索引使用坑:

  • 用df['clean_tweet'][i]取数时,Pandas默认是拿i当行标签(index)去匹配取值,不是按第i行的物理位置拿值。
  • 你当前的DataFrame索引根本不是连续从0开始的整数——大概率是之前做过空值过滤、条件筛选、删行操作后没有重置索引,导致行标签出现了跳空:比如行标签走到31961之后,直接跳过了31962,从31963开始往后接,哪怕整个df总共有56745行,31962这个标签也已经不在索引里了。
  • 循环里的i是从0数到len(df)-1的位置序号:在i从0到31961的区间,序号刚好和现有行标签完全重合,所以前3万多次循环都能正常取数、打印推文,你会感觉流程已经跑了大半;等i走到31962时,Pandas拿这个值去索引里找标签,发现根本不存在,直接抛KeyError,循环当场中断,根本执行不到后面给列赋值的步骤。
可落地修复方案
  • 最小改动修复:把原来的按标签取数换成按物理位置取数,将对应行改为tweet = str(df['clean_tweet'].iloc[i])。.iloc完全不感知行标签的内容,严格按照行在df里的物理顺序取值,和循环里的i值一一对应,不会出现标签找不到的问题。
  • 前置索引修复:在循环开始前加一句df = df.reset_index(drop=True),强制把df的行标签重置成从0开始的连续整数,后续哪怕还用原来的df['clean_tweet'][i]写法,标签和物理位置完全对齐,也不会触发KeyError。
  • 更高效的替代写法:不用手写逐行for循环,直接用Pandas的列级apply完成处理,既不受索引逻辑影响,处理速度也比原生for循环快数倍,示例代码:
    ps = PorterStemmer()
    
    def process_single_tweet(raw_text):
        text = str(raw_text).lower()
        split_words = text.split()
        stemmed = [ps.stem(word) for word in split_words if word not in stopWords]
        return ' '.join(stemmed)
    
    # 自动逐行匹配对应索引完成处理
    df['clean_tweet'] = df['clean_tweet'].apply(process_single_tweet)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 13:36:06