2016-05-22 6 views
18

Импортирующих панд «pandas.indexes» не бросать ошибку, а пытаются читать панда dataframe определенно как таковые:ImportError: Нет модуль с именем

import numpy as np 
import pandas as pd 
import matplotlib 
import seaborn as sns 
sns.set(style="white") 

control_data = pd.read_pickle('null_report.pickle') 
test_data = pd.read_pickle('test_report.pickle') 

отслеживающие 165 линий с тремя параллельными исключениями (что бы это ни значило). Is read_pickle не совместим с версией pandas 17.1 Я бегу? Как я могу расклеить свой фреймворк для использования?

Ниже приводится копия TRACEBACK:

ImportError        Traceback (most recent call last) 
C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in try_read(path, encoding) 
    45    with open(path, 'rb') as fh: 
---> 46     return pkl.load(fh) 
    47   except (Exception) as e: 

ImportError: No module named 'pandas.indexes' 

During handling of the above exception, another exception occurred: 

ImportError        Traceback (most recent call last) 
C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in try_read(path, encoding) 
    51     with open(path, 'rb') as fh: 
---> 52      return pc.load(fh, encoding=encoding, compat=False) 
    53 

C:\Users\test\Anaconda3\lib\site-packages\pandas\compat\pickle_compat.py in load(fh, encoding, compat, is_verbose) 
    115 
--> 116   return up.load() 
    117  except: 

C:\Users\test\Anaconda3\lib\pickle.py in load(self) 
    1038     assert isinstance(key, bytes_types) 
-> 1039     dispatch[key[0]](self) 
    1040   except _Stop as stopinst: 

C:\Users\test\Anaconda3\lib\pickle.py in load_stack_global(self) 
    1342    raise UnpicklingError("STACK_GLOBAL requires str") 
-> 1343   self.append(self.find_class(module, name)) 
    1344  dispatch[STACK_GLOBAL[0]] = load_stack_global 

C:\Users\test\Anaconda3\lib\pickle.py in find_class(self, module, name) 
    1383     module = _compat_pickle.IMPORT_MAPPING[module] 
-> 1384   __import__(module, level=0) 
    1385   if self.proto >= 4: 

ImportError: No module named 'pandas.indexes' 

During handling of the above exception, another exception occurred: 

ImportError        Traceback (most recent call last) 
C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in read_pickle(path) 
    59  try: 
---> 60   return try_read(path) 
    61  except: 

C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in try_read(path, encoding) 
    56     with open(path, 'rb') as fh: 
---> 57      return pc.load(fh, encoding=encoding, compat=True) 
    58 

C:\Users\test\Anaconda3\lib\site-packages\pandas\compat\pickle_compat.py in load(fh, encoding, compat, is_verbose) 
    115 
--> 116   return up.load() 
    117  except: 

C:\Users\test\Anaconda3\lib\pickle.py in load(self) 
    1038     assert isinstance(key, bytes_types) 
-> 1039     dispatch[key[0]](self) 
    1040   except _Stop as stopinst: 

C:\Users\test\Anaconda3\lib\pickle.py in load_stack_global(self) 
    1342    raise UnpicklingError("STACK_GLOBAL requires str") 
-> 1343   self.append(self.find_class(module, name)) 
    1344  dispatch[STACK_GLOBAL[0]] = load_stack_global 

C:\Users\test\Anaconda3\lib\pickle.py in find_class(self, module, name) 
    1383     module = _compat_pickle.IMPORT_MAPPING[module] 
-> 1384   __import__(module, level=0) 
    1385   if self.proto >= 4: 

ImportError: No module named 'pandas.indexes' 

During handling of the above exception, another exception occurred: 

ImportError        Traceback (most recent call last) 
C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in try_read(path, encoding) 
    45    with open(path, 'rb') as fh: 
---> 46     return pkl.load(fh) 
    47   except (Exception) as e: 

ImportError: No module named 'pandas.indexes' 

During handling of the above exception, another exception occurred: 

ImportError        Traceback (most recent call last) 
C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in try_read(path, encoding) 
    51     with open(path, 'rb') as fh: 
---> 52      return pc.load(fh, encoding=encoding, compat=False) 
    53 

C:\Users\test\Anaconda3\lib\site-packages\pandas\compat\pickle_compat.py in load(fh, encoding, compat, is_verbose) 
    115 
--> 116   return up.load() 
    117  except: 

C:\Users\test\Anaconda3\lib\pickle.py in load(self) 
    1038     assert isinstance(key, bytes_types) 
-> 1039     dispatch[key[0]](self) 
    1040   except _Stop as stopinst: 

C:\Users\test\Anaconda3\lib\pickle.py in load_stack_global(self) 
    1342    raise UnpicklingError("STACK_GLOBAL requires str") 
-> 1343   self.append(self.find_class(module, name)) 
    1344  dispatch[STACK_GLOBAL[0]] = load_stack_global 

C:\Users\test\Anaconda3\lib\pickle.py in find_class(self, module, name) 
    1383     module = _compat_pickle.IMPORT_MAPPING[module] 
-> 1384   __import__(module, level=0) 
    1385   if self.proto >= 4: 

ImportError: No module named 'pandas.indexes' 

During handling of the above exception, another exception occurred: 

ImportError        Traceback (most recent call last) 
<ipython-input-17-3b05fe7d20a4> in <module>() 
     3 # test_data = np.genfromtxt(fh, usecols=2) 
     4 
----> 5 control_data = pd.read_pickle('null_report.pickle') 
     6 test_data = pd.read_pickle('test_report.pickle') 
     7 

C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in read_pickle(path) 
    61  except: 
    62   if PY3: 
---> 63    return try_read(path, encoding='latin1') 
    64   raise 

C:\Users\test\Anaconda3\lib\site-packages\pandas\io\pickle.py in try_read(path, encoding) 
    55    except: 
    56     with open(path, 'rb') as fh: 
---> 57      return pc.load(fh, encoding=encoding, compat=True) 
    58 
    59  try: 

C:\Users\test\Anaconda3\lib\site-packages\pandas\compat\pickle_compat.py in load(fh, encoding, compat, is_verbose) 
    114   up.is_verbose = is_verbose 
    115 
--> 116   return up.load() 
    117  except: 
    118   raise 

C:\Users\test\Anaconda3\lib\pickle.py in load(self) 
    1037      raise EOFError 
    1038     assert isinstance(key, bytes_types) 
-> 1039     dispatch[key[0]](self) 
    1040   except _Stop as stopinst: 
    1041    return stopinst.value 

C:\Users\test\Anaconda3\lib\pickle.py in load_stack_global(self) 
    1341   if type(name) is not str or type(module) is not str: 
    1342    raise UnpicklingError("STACK_GLOBAL requires str") 
-> 1343   self.append(self.find_class(module, name)) 
    1344  dispatch[STACK_GLOBAL[0]] = load_stack_global 
    1345 

C:\Users\test\Anaconda3\lib\pickle.py in find_class(self, module, name) 
    1382    elif module in _compat_pickle.IMPORT_MAPPING: 
    1383     module = _compat_pickle.IMPORT_MAPPING[module] 
-> 1384   __import__(module, level=0) 
    1385   if self.proto >= 4: 
    1386    return _getattribute(sys.modules[module], name)[0] 

ImportError: No module named 'pandas.indexes' 

Я также попытался загрузки файла рассол из рассола непосредственно:

via_pickle = pickle.load(open('null_report.pickle', "rb"))

и получил ту же ошибку:

--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-23-ba2e3adae1c4> in <module>() 
     1 
----> 2 via_pickle = pickle.load(open('null_report.pickle', "rb")) 
     3 
     4 # control_data = pd.read_pickle('null_report.pickle') 
     5 # test_data = pd.read_pickle('test_report.pickle') 

ImportError: No module named 'pandas.indexes' 
+2

Я думаю, вам нужно загрузить более старую версию панд, чтобы раскрыть это. Затем сохраните как csv или что-то еще. Pickle зависит от структуры класса и модуля, указывающего на восстановление объекта. Если эта структура изменится, маринование сломается. – piRSquared

+7

вы пытаетесь прочитать новый маринованный со старой версией панд. pandas.indexes не существует до 0.18.0; pandas предлагает back compat не forward compat (что означает, что более новые версии могут читать старше, но старше не могут читать более новые) – Jeff

+2

Я использую 0.20.2 и имею эту проблему с рассолом, который был сгенерирован с более старой версией. – MPa

ответ

20

Я имел эту ошибку, когда я создал PKL файл с Python 2.7 и пытался читать его с питоном 3.6 я сделал:

pd.read_pickle('foo.pkl') 

и работал

+2

Я считаю, что это должен быть правильный ответ. Это работает в большинстве случаев, при обновлении 'pandas' этого не происходит. –

+0

Я также согласен, что это должен быть правильный ответ – Kadaj13

9

У меня была эта проблема, пытаясь открыть маринованный dataframe mad e с пандами 0.18.1 с использованием панд 0.17.1. Если вы используете пип, обновить панда с:

pip install --upgrade pandas 

Если вы используете библиотеку как анаконда, использование:

conda upgrade pandas 

Если вам нужно иметь оба версии панды на вашей машине, рассмотрит using virtualenv

+0

Работал для меня. Это небольшая деталь, но мне пришлось использовать pp3 installpups для поддержки Python 3. – Berun

2

Решение проблемы без обновления pandas или любого другого использования.

Если вы используете python2

import pickle 
with open('filename.pkl', 'rb') as fo: 
     dict = pickle.load(fo, encoding='latin1’) 

Если вы используете python3

import _pickle as cPickle 
with open('filename.pkl', 'rb') as fo: 
     dict = cPickle.load(fo, encoding='latin1’) 
+0

Ваше решение python3 не работает для меня, оно дает «UnicodeDecodeError» в последней строке, '' utf- 8 'кодек не может декодировать байт 0x80 в позиции 0: недопустимый стартовый байт. ' – user1416227

+0

все еще дает мне ModuleNotFoundError: ни один модуль с именем' pandas.indexes 'на python3.6 – Skirrebattie

7

Сохранение и загрузка в различных версиях pandas с помощью pickle часто не работает. Вместо этого используйте pandas.HDFStore.

Когда мне нужно было обновить панды, но также потребовались некоторые данные, сохраненные с рассолом в предыдущих версиях, я вернулся и снова сохранил эти данные в формате HDF, когда ничего не получилось. Больше нет проблем.

Работы для любого вида структуры данных pandas, кажется, даже мультииндексированные dataframes! Короче говоря, если травление заканчивается после обновления версии, попробуйте HDFStore; он более надежный (и более эффективный!).

+0

Даже не знал об этом методе, который, возможно, затем откроется в 'R'. – ryanjdillon

Смежные вопросы