构建LSTM模型时触发KeyError: 'text'错误,请求技术支持
解决LSTM数据预处理中的KeyError: 'text'问题
你遇到的KeyError: 'text'本质问题很明确:你的DataFrame里不存在名为text的列,当你尝试调用df['text'].map(...)时,pandas找不到这个列就会抛出这个错误。下面给你一步步排查和修复的方案:
第一步:确认CSV文件的列名
首先你需要搞清楚financial.csv里到底有哪些列。在读取CSV之后立刻加入一行代码:
df = pd.read_csv('financial.csv') print(df.columns) # 打印所有列名
运行后你就能看到实际的列名了——大概率是你要么把列名记错了(比如实际是Text、content或者article),要么CSV文件的表头格式有问题。
第二步:修复clean函数的隐藏bug
除了KeyError之外,你的clean函数本身还有几个会导致后续报错的问题,提前帮你修正:
- 没有导入
SnowballStemmer,需要补充导入语句 text.translate(string.punctuation)用法错误,translate需要传入转换表而非直接传标点字符串- 多余的
text = text.split():前面已经用text.lower().split()把文本转成了列表,列表没有split()方法,这行代码会直接报错
修正后的clean函数如下:
from nltk.stem.snowball import SnowballStemmer # 新增导入 def clean(text): # 创建删除标点的转换表,正确移除所有标点 text = text.translate(str.maketrans('', '', string.punctuation)) text = text.lower().split() stops = set(stopwords.words("english")) # 过滤停用词和长度小于3的单词 text = [w for w in text if w not in stops and len(w) >= 3] stemmer = SnowballStemmer('english') stemmed_words = [stemmer.stem(word) for word in text] text = " ".join(stemmed_words) return text
第三步:匹配正确的列名进行预处理
根据第一步打印的列名,把代码里的text替换成实际的文本列名。比如如果CSV里的文本列叫content,那修改成:
# 注意:这里用原列名content,处理后可以存到新列cleaned_text里,避免覆盖原数据 df['cleaned_text'] = df['content'].map(lambda text: clean(text))
如果确认CSV里确实有text列,但读取后找不到,可能是表头行的问题,可以尝试指定header参数读取:
df = pd.read_csv('financial.csv', header=0) # 强制用第一行作为表头
按照这三步操作,应该就能解决KeyError的问题,同时避免后续预处理阶段的其他错误。
内容的提问来源于stack exchange,提问作者Adya
相关产品推荐
相关产品推荐

