Python 导入错误:没有名为“pandas.indexes”的模块

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/37371451/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 19:18:36  来源:igfitidea点击:

ImportError: No module named 'pandas.indexes'

pythonnumpypandaspickle

提问by Thomas Matthew

Importing pandas didn't throw the error, but rather trying to read a picked pandas dataframe as such:

导入熊猫并没有抛出错误,而是尝试像这样读取选择的熊猫数据帧:

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')

The traceback is 165 lines with three concurrent exceptions (whatever that means). Is read_picklenot compatible with pandas version 17.1 I'm running? How do I unpickle my dataframe for use?

回溯是 165 行,包含三个并发异常(无论这意味着什么)。是read_pickle不是熊猫版17.1我跑兼容?如何解开我的数据框以供使用?

Below is a copy of the 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'

I also tried loading the pickle file from pickle directly:

我也尝试直接从pickle加载pickle文件:

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

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

and got the same error:

并得到相同的错误:

---------------------------------------------------------------------------
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'

回答by ricmarchao

I had this error when I created a pkl file with python 2.7 and was trying to read it with python 3.6 I did:

当我使用 python 2.7 创建 pkl 文件并尝试使用 python 3.6 读取它时,我遇到了这个错误,我做了:

pd.read_pickle('foo.pkl')

and it worked

它起作用了

回答by Oliver

I had this problem from trying to open a pickled dataframe made with pandas 0.18.1 using pandas 0.17.1. If you are using pip, upgrade pandas with:

我在尝试使用 Pandas 0.17.1 打开由 Pandas 0.18.1 制作的腌制数据框时遇到了这个问题。如果您使用 pip,请使用以下命令升级 pandas:

pip install --upgrade pandas

If you are using a library like anaconda, use:

如果您使用像 anaconda 这样的库,请使用:

conda upgrade pandas

If you need to have both versions of pandas on your machine, consider using virtualenv

如果您的机器上需要同时安装两个版本的 pandas,请考虑使用virtualenv

回答by OrangeSherbet

Saving and loading in different versions of pandasusing pickleoften does not work. Instead, use pandas.HDFStore.

在不同版本的pandas使用中保存和加载pickle往往不起作用。相反,使用pandas.HDFStore.

When I needed to update pandas but also needed some data saved with pickle in previous versions, I went back and re-saved that data in HDF format instead, when nothing else would work. No problems anymore.

当我需要更新 Pandas 但还需要在以前的版本中使用 pickle 保存一些数据时,我返回并以 HDF 格式重新保存该数据,当其他方法无效时。没有问题了。

Works for any sort of pandas data structure it seems, even multi-indexed dataframes! In short, if pickling fails after a version upgrade, try HDFStore; it's more reliable (and more efficient!).

适用于任何类型的 Pandas 数据结构,甚至是多索引数据帧!总之,如果版本升级后pickling失败,试试HDFStore;它更可靠(也更高效!)。

回答by Dave.Cheng

Here is the solution without updating pandas or whatever your using.

这是不更新熊猫或您使用的任何内容的解决方案。

If you're using python2

如果您使用的是 python2

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

If you're using python3

如果您使用的是 python3

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

回答by RayZen

In the pandas 0.23.4, there is a better way to fix the problem. Use the pandas.read_pickleto read the fileobject, like:

在 pandas 0.23.4 中,有一个更好的方法来解决这个问题。使用pandas.read_pickle来读取文件对象,例如:

pd.read_pickle(open('test_report.pickle', 'rb'))

pd.read_pickle(open('test_report.pickle', 'rb'))

回答by Shiva

If you want to read pickled text instead of a file, do

如果要阅读腌制文本而不是文件,请执行

import io

pd.read_pickle(io.BytesIO(pickled_text))

If you face the error - ValueError: Unrecognized compression type: infer,
explicitly mention the compression type. It could be one of None(no compression), gzip, bz2, xz or zip(depending upon file extension).
pd.read_pickle(io.BytesIO(pickled_text), compression=None)

如果您遇到错误 - ValueError: Unrecognized compression type: infer,请
明确提及压缩类型。它可以是 None(无压缩)、gzip、bz2、xz 或 zip(取决于文件扩展名)之一。
pd.read_pickle(io.BytesIO(pickled_text), compression=None)

回答by Someone

A flexible way to deal with internal API changes that break unpickling is to implement a custom Unpickler instance.

处理破坏 unpickling 的内部 API 更改的一种灵活方法是实现自定义 Unpickler 实例。

For example, the pandas.indexesmodule has been moved to pandas.core.indexes. We can write an Unpickler, that adapts the module path accordingly. To do that, we can overwrite the method find_class:

例如,pandas.indexes模块已移至pandas.core.indexes. 我们可以编写一个 Unpickler,相应地调整模块路径。为此,我们可以覆盖该方法find_class

import sys
class Unpickler(pickle.Unpickler):
    def find_class(self, module, name):
        '''This method gets called for every module pickle tries to load.'''
        # python 2 --> 3 compatibility: __builtin__ has been renamed to builtins
        if module == '__builtin__':
            module = 'builtins'
        # pandas compatibility: in newer versions, pandas.indexes has been moved to pandas.core.indexes
        if 'pandas.indexes' in module:
            module = module.replace('pandas.indexes', 'pandas.core.indexes')
        __import__(module)
        return getattr(sys.modules[module], name)

with open('/path/to/pickle.pkl', 'rb') as file:
    pdf = Unpickler(file).load()