【问题标题】:How do I solve this Python KeyError?如何解决这个 Python KeyError?
【发布时间】:2020-06-25 07:02:57
【问题描述】:

所以,我正在尝试使用朴素贝叶斯构建 Twitter 情绪分析模型。我在尝试预处理数据时遇到问题。 这是我的代码:

这是我的数据加载代码

df = pd.read_csv('full-corpus.csv',
encoding='latin1',
names=['topic', 'sentiment', 'TweetId', 'TweetDate','TweetText'])
trainingData = df.to_dict(orient='records')

这是我的数据预处理代码:

import re
import nltk
nltk.download('stopwords')
nltk.download('punkt')
from nltk.tokenize import word_tokenize
from string import punctuation 
from nltk.corpus import stopwords 

class PreProcessTweets:
    def __init__(self):
        self._stopwords = set(stopwords.words('english') + list(punctuation) + ['AT_USER','URL'])
        
    def processTweets(self, list_of_tweets):
        processedTweets=[]
        for tweet in list_of_tweets:
            
            processedTweets.append((self._processTweet(tweet['TweetText']),tweet['sentiment']))
        return processedTweets
    
    def _processTweet(self, tweet):
        tweet = tweet.lower() # convert text to lower-case
        tweet = re.sub('((www\.[^\s]+)|(https?://[^\s]+))', 'URL', tweet) # remove URLs
        tweet = re.sub('@[^\s]+', 'AT_USER', tweet) # remove usernames
        tweet = re.sub(r'#([^\s]+)', r'\1', tweet) # remove the # in #hashtag
        tweet = word_tokenize(tweet) # remove repeated characters (helloooooooo into hello)
        return [word for word in tweet if word not in self._stopwords]
tweetProcessor = PreProcessTweets()
preprocessedTrainingSet = tweetProcessor.processTweets(trainingData)
preprocessedTestSet = tweetProcessor.processTweets(testDataSet)

我收到此键错误

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-96-acc96635cf33> in <module>()
      1 tweetProcessor = PreProcessTweets()
      2 preprocessedTrainingSet = tweetProcessor.processTweets(trainingData)
----> 3 preprocessedTestSet = tweetProcessor.processTweets(testDataSet)

<ipython-input-95-05e6d1942355> in processTweets(self, list_of_tweets)
     15         for tweet in list_of_tweets:
     16 
---> 17             processedTweets.append((self._processTweet(tweet['TweetText']),tweet['sentiment']))
     18         return processedTweets
     19 

KeyError: 'TweetText'

请帮助解决这个问题。谢谢

【问题讨论】:

  • 能否包含您的数据框的一部分,以便我们试用。
  • 错误在testDataSet,所以它可能没有你认为的结构。它是在哪里定义的,它是什么样的?
  • 你能说明你在哪里准备这个 testDataSet 可能没有关键的 TweetText

标签: python keyerror


【解决方案1】:

您似乎通过了一个列表,但您想使用一个字典。要使其工作,您必须使用:

for key, value in dict_foo.items()

如果你浏览一个列表,而它是一个字典,你将只能访问密钥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多