使用Python re模块处理文本时出现KeyError: 53报错如何解决?
问题原因
报错KeyError: 53指向re.sub所在行,本质是代码尝试访问texts['title']中索引为53的元素,但该索引不存在,常见触发场景如下:
- 你的
texts是经过过滤、删行操作的Pandas DataFrame,原有索引标签不连续。range(len(texts))生成的是从0开始的连续整数,你用texts['title'][i]取值时Pandas默认按索引标签匹配,无法找到标签为53的行就会抛出键错误。 - 少数情况下是
texts['title']序列本身长度和texts总长度不一致,导致遍历到后半段时索引越界。
解决方法
推荐优先使用无索引遍历的方案,完全规避索引不匹配问题:
corpus_test = [] ps = PorterStemmer() # 直接遍历title列的所有值,不依赖索引标签 for title in texts['title']: review = re.sub('[^a-zA-Z]',' ',title) review = review.lower() review = review.split() review = [ps.stem(word) for word in review if not word in stopwords.words('english')] review = ' '.join(review) corpus_test.append(review)
如果需要保留索引遍历的写法,二选一即可:
- 遍历前重置DataFrame索引为连续值:在循环前新增代码
texts = texts.reset_index(drop=True) - 取值时强制按位置匹配:将
texts['title'][i]修改为texts['title'].iloc[i]
内容的提问来源于stack exchange,提问作者Khadija
相关产品推荐
相关产品推荐

