ImportError:没有名为'pandas.core.internals.managers'的模块; 'pandas.core.internals'不是一个包

Fat*_*923 45 python pickle pandas

当我尝试读取由以前版本的pandas保存的pickle文件时,它会产生一个ImportError.

ImportError:没有名为'pandas.core.internals.managers'的模块; 'pandas.core.internals'不是一个包

stackoverflow没有命中,所以我想分享我对这个特定问题的解决方案.

Fat*_*923 47

由于以前保存的pickle文件的编码,此错误消失.如果您将pandas更新为新修改的版本,则会产生此导入错误.

  • 通过运行python3 -m pip install --upgrade pandas更新熊猫。 (12认同)
  • 谢谢,我升级了熊猫:`pip install --upgrade pandas` ..并且问题解决了。 (3认同)
  • @LorenzWalthert实际上,有一个后门。听起来很虚拟,但确实有效。用“ pandas 0.23”打开您的“ pickle”文件,并将其保存为另一种格式,例如“ json”。然后,用pandas 0.24打开json文件,并保存pickle格式的文件。 (2认同)

小智 20

使用pandas version时遇到相同的错误0.23.4

0.24.1通过以下方式明确安装了pandas 版本:

pip3 install pandas==0.24.1
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题(我使用的Python版本是3.5)


小智 7

我遇到了同样的问题,但对我来说,这似乎来自于pickle包/与pandas包的交互。

我的熊猫版本为0.23.4。我pandas.Dataframe.to_pickle使用python 3.6.6和Pandas 0.23.4版保存了一些咸菜文件。然后,我升级到python 3.7.2(Pandas版本0.23.4),并使用启用了读取这些pickle文件的功能pandas.Dataframe.read_pickle。接下来,我将熊猫升级到熊猫0.24.1,它对我有用。我可以再次读取这些文件。

  • 如果像我这样在Jupyter Notebook中遇到此问题,则可能需要重新启动笔记本才能使新安装的熊猫工作。 (2认同)

小智 7

对于大多数情况,更新 pandas 将是最佳解决方案。但是,如果您在更新 pandas 版本时受到限制,并且需要使用在更高版本中生成和腌制的 pandas 对象,则可以添加类位置映射,如下所示。

from pandas.compat.pickle_compat import _class_locations_map

_class_locations_map.update({
    ('pandas.core.internals.managers', 'BlockManager'): ('pandas.core.internals', 'BlockManager')
})
Run Code Online (Sandbox Code Playgroud)