XXI_BEK
@XXI_BEK
Студент

Как исправить данные ошибки Python?

6502ab1c64237335666550.png
def process(train, categories):
 cats = categories
 cats.append('full')
 mux = pd.MultiIndex.from_product([['Count', 'TF', 'TF-IDF'],['Без стоп-слов', 'Со стоп-словами']])
 summary = dict()

 for category in cats:
  summary[category] = pd.DataFrame(columns=mux)

  stop_words = [None, 'english']
  idf = [False, True]

  indx_stop = {
      'english': 'Без стоп-слов',
      None: 'Со стоп-cловами'
      }

  indx_tf = {
      False: 'TF',
      True: 'TF-IDF'
      }

  for category in cats:
    for stop in stop_words:
      vect = CountVectorizer(max_features=10000, stop_words=stop)
      vect.fit(train[category])
      train_data = vect.transform(train[category])
      summary[category]['Count', indx_stop[stop]] = top_list(vect, train_data, 20)

      for tf in idf:
        tfidf = TfidfTransformer(use_idf = tf).fit(train_data)
        train_fidf = tfidf.transform(train_data)
        summary[category][indx_tf[tf], indx_stop[stop]] = top_list(vect, train_fidf, 20)

  return summary


Как исправить ошибку (на скрине)?

Ошибка:
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-86-aeec6dd651b6> in <cell line: 1>()
----> 1 summ_without_stem = process(twenty_train, categories)
      2 summ_with_stem = process(stem_train, categories)
      3 
      4 for cat in ['full'] + categories:
      5  summ_without_stem[cat].to_excel('without_stem_' + cat + '.xlsx')

<ipython-input-52-471fdaede5b1> in process(train, categories)
     26       vect.fit(train[category])
     27       train_data = vect.transform(train[category])
---> 28       summary[category]['Count', indx_stop[stop]] = top_list(vect, train_data, 20)
     29 
     30       for tf in idf:

KeyError: 'rec.motorcycles'
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
Ну смотри, как тебе помочь в слепую на этом коде я не знаю, у меня нету возможности дебажить. Смотри,

1. Ты создаешь словарь summary, где ключи это элементы массива cats, а значения pandas фреймы, (Нормальный ход, так делают).

2. Затем ты обращаешься к ключу сначала словаря, а затем выбираешь подсет фрейма и меняешь его. Подсет фрейма надо выбирать методом loc[index, column]. Посмотри в документации. Key Error может , как ключи словаря давать, так и индексы фрейма тоже key error могут давать, если их там нет.

3. Сделай функцию которая делает все для одного фрейма, функция получит фрейм и вернет фрейм. Когда убедишься что все работает, собирай эти фреймы в словарь. В текущем виде понятно, у меня нет данных что бы дебажить, но код плохо читабельный, тебе нужно больше декомпозиции, что бы ты мог проверять, как твой процесс идет, сделай больше функций и самому будет легче и вопрос более точный можно будет задать.

4. CountVectorizer это scikit-learn посмотри там examples, они там супер, рассмотри так же использование Pipeline, на чистом pandas весь процесс не пишут. То есть всю последовательность трансфлормаций собирают в Pipeline, ты в своем коде еще не дошел до тестового сета, но применит трансформации на тестовых данных сам при чем правильно, если все свои трансформации чейнить в Pipeline.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы