Странная ошибка при попытке рандомизировать набор данных

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь перетасовать данные с помощью следующего кода.

 import pandas as pd
import numpy as np

from sklearn.naive_bayes import MultinomialNB
 data = pd.read_csv('dataset.txt')
 np.random.shuffle(data)
  

Однако выполнение этого выдает мне следующую ошибку. Я не понимаю, откуда берется эта ошибка.

 Traceback (most recent call last):
File "sample2.py", line 12, in <module>
 np.random.shuffle(data)
File "mtrand.pyx", line 4668, in mtrand.RandomState.shuffle (numpy/random /mtrand/mtrand.c:30498)
 File "mtrand.pyx", line 4671, in mtrand.RandomState.shuffle (numpy/random/mtrand/mtrand.c:30438)
 File "/Users/marcvanderpeet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/frame.py", line 1992, in __getitem__
 return self._getitem_column(key)
 File "/Users/marcvanderpeet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/frame.py", line 2004, in _getitem_column
 result = result[key]
 File "/Users/marcvanderpeet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/frame.py", line 1992, in __getitem__
 return self._getitem_column(key)
 File "/Users/marcvanderpeet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/frame.py", line 1999, in _getitem_column
 return self._get_item_cache(key)
 File "/Users/marcvanderpeet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/generic.py", line 1345, in _get_item_cache
 values = self._data.get(item)
 File "/Users/marcvanderpeet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/internals.py", line 3225, in get
 loc = self.items.get_loc(item)
 File "/Users/marcvanderpeet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/indexes/base.py", line 1878, in get_loc
 return self._engine.get_loc(self._maybe_cast_indexer(key))
 File "pandas/index.pyx", line 137, in pandas.index.IndexEngine.get_loc  (pandas/index.c:4027)
  File "pandas/index.pyx", line 157, in pandas.index.IndexEngine.get_loc (pandas/index.c:3891)
  File "pandas/hashtable.pyx", line 675, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12408)
  File "pandas/hashtable.pyx", line 683, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12359)
  

Есть мысли о том, что здесь пошло не так?

Ответ №1:

Вы применяете функцию numpy к фрейму данных pandas.

Вы можете преобразовать фрейм данных в массив numpy и перетасовать его:

  np.random.shuffle(data.values)
  

Или вы можете использовать функцию pandas:

 data = data.sample(len(data))
  

Ответ №2:

Я не совсем понимаю всю обратную трассировку, но для меня ошибка просто связана с тем фактом, что dataframe не является массивом numpy. Чтобы исправить это, просто используйте фактический базовый массив dataframe с помощью data.values .

Мое предположение о том, что происходит в трассировке, заключается в том, что np.random.shuffle не проверяет, являются ли входные данные допустимым массивом, и пытается обрабатывать и извлекать данные из dataframe так же, как это было бы для обычного массива, отсюда и все ошибки, касающиеся getitem и так далее.