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

对DataFrame两列执行NLP预处理时触发KeyError错误求助

Pandas多列索引触发KeyError的解决方法

错误原因

KeyError: ('title', 'body')的本质是多列索引语法错误:

  • 单列索引时,df['body']是合法写法,因为传入的是单个列名字符串;
  • 但多列索引必须用列表包裹列名(df[['title', 'body']]),而你写的df['title', 'body']会被Pandas解析成一个元组('title', 'body'),它会尝试查找名称为这个元组的列——显然你的DataFrame不存在这样的列,因此触发KeyError。

修正后的代码

1. 修正缺失值填充与类型转换

# 用列表包裹多列名,修正索引语法
gmeDateDf.loc[:, ['title', 'body']] = gmeDateDf[['title', 'body']].fillna('NaN').astype(str)

2. 对多列应用文本预处理函数

因为preprocess_text是处理单个字符串的函数,对多列应用时,有两种简洁写法:

写法一:用applymap直接遍历所有元素

gmeDateDfProcessed = gmeDateDf[['title', 'body']].applymap(preprocess_text)

写法二:对每一列单独应用apply

gmeDateDfProcessed = gmeDateDf[['title', 'body']].apply(lambda col: col.apply(preprocess_text))

可选优化:过滤填充的'NaN'字符串

当前代码填充的'NaN'字符串会被预处理成['nan'],如果需要排除这种无效内容,可以修改预处理函数:

def preprocess_text(text):
    if text == 'NaN':
        return []
    tokens = word_tokenize(text.lower())
    processed_tokens = [lemmatizer.lemmatize(word) for word in tokens if word.isalpha() and word not in stop_words]
    return processed_tokens

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:56:27