KeyError - Панды - PullRequest
       44

KeyError - Панды

0 голосов
/ 14 июня 2019

Я нашел код для классификации текста в tenorflow, и когда я пытаюсь запустить этот код: https://www.tensorflow.org/beta/tutorials/keras/feature_columns я получаю сообщение об ошибке.

Я использовал отсюда набор данных: https://www.kaggle.com/kazanova/sentiment140

Traceback (most recent call last):
  File "text_clas.py", line 35, in <module>
    train_ds = df_to_dataset(train, batch_size=batch_size)
  File "text_clas.py", line 27, in df_to_dataset
    labels = dataframe.pop('target')
  File "/home/yildiz/.local/lib/python2.7/site-packages/pandas/core/generic.py", line 809, in pop
    result = self[item]
  File "/home/yildiz/.local/lib/python2.7/site-packages/pandas/core/frame.py", line 2927, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/yildiz/.local/lib/python2.7/site-packages/pandas/core/indexes/base.py", line 2659, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1601, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1608, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'target'

Когда я напечатал df.index.name, я получил НЕТ.Итак, набор данных неверен или я что-то не так делаю?

Я изменил dataframe.head () на print (dataframe.head ()) и получил вывод:

   0  ...  @switchfoot http://twitpic.com/2y1zl - Awww, that's a bummer.  You shoulda got David Carr of Third Day to do it. ;D
0  0  ...  is upset that he can't update his Facebook by ...                                                                  
1  0  ...  @Kenichan I dived many times for the ball. Man...                                                                  
2  0  ...    my whole body feels itchy and like its on fire                                                                   
3  0  ...  @nationwideclass no, it's not behaving at all....                                                                  
4  0  ...                      @Kwesidei not the whole crew                                                                   

[5 rows x 6 columns]
1023999  train examples
256000  validation examples
320000  test examples

Ответы [ 3 ]

1 голос
/ 14 июня 2019

Возможно, вы неправильно загрузили данные.Убедитесь, что ваш фрейм данных не пуст.

Если все в порядке, проверьте, является ли 'target' именем столбца (например, выполнив print(train.head()) или даже print(dataframe.head()) после того, как вы прочиталиваш CSV-файл).

Кроме того, я не совсем уверен, что df.index.name будет печатать.Вы хотели написать df.index.values?(Хотя индекс, вероятно, не имеет ничего общего с вашей проблемой.)

РЕДАКТИРОВАТЬ:

Хорошо, так что, похоже, у вас нет столбцов, назначенных вашему фрейму данных.Вы можете сделать это с помощью dataframe.columns = ['target', ...] # and pick the other names

Кроме того, ваш заголовок является первым столбцом, поэтому вы должны установить header=False при вызове read_csv, а затем установить столбцы (если вы этого не сделаете, то выпотеряет первый ряд).

Обратите внимание, что df.index.name не имеет никакого смысла (как я уже говорил), поэтому печать NONE ничего не значит.

0 голосов
/ 14 июня 2019

Итак, это код, который я использую

from __future__ import absolute_import, division, print_function

import tensorflow as tf
from tensorflow import keras

import numpy as np

import pandas as pd
from tensorflow import feature_column
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split

encoding='utf-8-sig'
dataframe = pd.read_csv('~/Schreibtisch/TwitterBot/training_dataset_twitter.csv')
dataframe.head()

train, test = train_test_split(dataframe, test_size=0.2)
train, val = train_test_split(train, test_size=0.2)
print(len(train), ' train examples')
print(len(val), ' validation examples')
print(len(test), ' test examples')


# A utility method to create a tf.data dataset from a Pandas Dataframe
def df_to_dataset(dataframe, shuffle=True, batch_size=32):
    dataframe = dataframe.copy()
    labels = dataframe.pop('target')
    ds = tf.data.Dataset.from_tensor_slices((dict(dataframe),labels))
    if shuffle:
        ds = ds.shuffle(buffer_size=len(dataframe))
    ds = ds.batch(batch_size)
    return ds

batch_size = 5 # A small batch sized is used for demonstration purposes
train_ds = df_to_dataset(train, batch_size=batch_size)
val_ds = df_to_dataset(val, shuffle=False, batch_size=batch_size)
test_ds = df_to_dataset(test, shuffle=False, batch_size=batch_size)

for feature_batch, label_batch in train_ds.take(1):
  print('Every feature:', list(feature_batch.keys()))
  print('A batch of ages:', feature_batch['age'])
  print('A batch of targets:', label_batch )
0 голосов
/ 14 июня 2019

Я скачал тот же CSV-файл. загрузить и запустить команду с всплывающими окнами. Оно работает. убедитесь, что вы загрузили правильный DataFrame. Вы уверены, что DataFrame называется «dataframe»? или просто "дф"? тогда df.pop ('target') должен работать

...