我通过Instagram API收集了一些数据,我已将其存储到pandas DataFrame中,后者又通过pandas .to_pickle()
方法保存.
尝试使用`read_pickle()'方法在另一台计算机上加载DataFrame时,会返回以下错误:
Traceback (most recent call last): File "examine.py", line 14, indataframe = 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
知道是什么原因引起的吗?
Pickle根本不知道如何重新创建类.一类是如何拆封和恢复的信息存储在类中:__new__
,__init__
,__setstate__
等等.
类似地,当类实例被pickle时,它们的类的代码和数据不会与它们一起被pickle.仅腌制实例数据.这是故意完成的,因此您可以修复类中的错误或向类添加方法,并仍然加载使用该类的早期版本创建的对象.如果您计划拥有可以看到类的许多版本的长寿命对象,那么在对象中放置版本号可能是值得的,这样可以通过类的
__setstate__()
方法进行适当的转换.
来源:Python泡菜:什么可以腌制和去腌制?
因此要解开它,pickle
需要加载类(以及任何中间模块).
如果你没有/想instagram
你应该检查如何将适当的值转换成原始的数据帧正常上课( -模int
,float
,array
......),你腌制之前.