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
ImportError: No module named 'pandas.indexes'
提问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_pickle
not 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 pandas
using pickle
often 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_pickle
to 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.indexes
module 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()