当前位置:  开发笔记 > 编程语言 > 正文

为什么pandas在从pickle文件中读取时会尝试导入模块?

如何解决《为什么pandas在从pickle文件中读取时会尝试导入模块?》经验,为你挑选了1个好方法。

我通过Instagram API收集了一些数据,我已将其存储到pandas DataFrame中,后者又通过pandas .to_pickle()方法保存.

尝试使用`read_pickle()'方法在另一台计算机上加载DataFrame时,会返回以下错误:

Traceback (most recent call last):
File "examine.py", line 14, in 
dataframe = pd.read_pickle(args["dataframe"])
File "/home/user/virtualenvs/geopandas/local/lib/python2.7/site-packages/pandas/io/pickle.py", line 65, in read_pickle
return try_read(path)
File "/home/user/virtualenvs/geopandas/local/lib/python2.7/site-packages/pandas/io/pickle.py", line 62, in try_read
return pc.load(fh, encoding=encoding, compat=True)
File "/home/user/virtualenvs/geopandas/local/lib/python2.7/site-packages/pandas/compat/pickle_compat.py", line 117, in load
return up.load()
File "/usr/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 1090, in load_global
klass = self.find_class(module, name)
File "/usr/lib/python2.7/pickle.py", line 1124, in find_class
__import__(module)
ImportError: No module named instagram.models

知道是什么原因引起的吗?



1> MSeifert..:

Pickle根本不知道如何重新创建类.一类是如何拆封和恢复的信息存储在类中:__new__,__init__,__setstate__等等.

类似地,当类实例被pickle时,它们的类的代码和数据不会与它们一起被pickle.仅腌制实例数据.这是故意完成的,因此您可以修复类中的错误或向类添加方法,并仍然加载使用该类的早期版本创建的对象.如果您计划拥有可以看到类的许多版本的长寿命对象,那么在对象中放置版本号可能是值得的,这样可以通过类的__setstate__()方法进行适当的转换.

来源:Python泡菜:什么可以腌制和去腌制?

因此要解开它,pickle需要加载类(以及任何中间模块).

如果你没有/想instagram你应该检查如何将适当的值转换成原始的数据帧正常上课( -模int,float,array......),你腌制之前.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有