繁体   English   中英

Pandas与pickle 0.14.1和0.15.2的向后兼容性问题

Pandas backwards compatibility issue with pickle 0.14.1 and 0.15.2

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我们使用pandas Dataframe作为我们时间序列数据的主要数据容器。 我们将数据帧打包成二进制blob到mongoDB文档中以便存储,以及关于时间序列blob的元数据的键。

当我们从pandas 0.14.1升级到0.15.2时,我们遇到了错误。

创建pandas Dataframe的二进制blob(0.14.1)

import lz4   
import cPickle

bd = lz4.compress(cPickle.dumps(df,cPickle.HIGHEST_PROTOCOL))

错误案例 :使用pandas 0.15.2从mongoDB读回

cPickle.loads(lz4.decompress(bd))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-37-76f7b0b41426> in <module>()
----> 1 cPickle.loads(lz4.decompress(bd))
TypeError: ('_reconstruct: First argument must be a sub-type of ndarray', <built-in function _reconstruct>, (<class 'pandas.core.index.Index'>, (0,), 'b'))

成功案例 :使用pandas 0.14.1从mongoDB读回,没有错误。

这似乎类似于从源代码编译的旧堆栈线程Pandas:默认的pickle行为已更改来自https://stackoverflow.com/users/644898/jeff的有用评论

您看到的错误消息`TypeError:_reconstruct:第一个参数必须是ndarray的子​​类型,因为python默认的unpickler确保被pickle的类层次结构与它重新创建的完全相同。 由于系列版本在版本之间发生了变化,因此默认的unpickler不再可能这样做了(这个恕我直言是pickle工作方式的一个错误)。 无论如何,大熊猫会破坏具有Seri​​es对象的pre-0.13泡菜。“

有关变通方法或解决方案的想法吗?

要重新创建错误:

安装在pandas 0.14.1 env:

df = pd.DataFrame(np.random.randn(10,10))
cPickle.dump(df,open("cp0141.p","wb"))
cPickle.load(open('cp0141.p','r')) # no error

在pandas 0.15.2 env中创建错误:

cPickle.load(open('cp0141.p','r'))
TypeError: ('_reconstruct: First argument must be a sub-type of ndarray', <built-in function_reconstruct>, (<class 'pandas.core.index.Int64Index'>, (0,), 'b'))
1 个回复

这被明确提到作为Index类现在不再是子类ndarray而是一个pandas对象,请参见此处

您只需使用pd.read_pickle来阅读泡菜。

1 WCF向后兼容性问题

我有一个WCF服务,必须从.net 2.0项目中引用。 我尝试使用“ 添加网络引用 ”方法来引用它,但它弄乱了参数。 例如,我在服务中有一个方法希望传递char[] ,但是当我添加Web引用时,该方法期望一个int[] 。 因此,我尝试设置svcutil并使其工作……。 我 ...

2 WCF服务 - 向后兼容性问题

我刚刚开始创建一些WCF服务,但我要求它们向后兼容遗留(.NET 1.1和2.0)客户端应用程序。 我已经设法让服务正常运行3.0和更高版本的客户端,但是当我使用basicHttpBinding端点发布服务时(我认为这是我需要的兼容性所需),服务会重构我的方法签名。 例如 在客户 ...

5 浮动操作按钮向后兼容性问题

因此,我正在制作一个带有多个浮动操作按钮的应用程序,尽管在我看来,它们是固定在视图中的,但是我喜欢它们的外观 无论如何,似乎对于较旧的API(例如软糖豆),它会在附加的图像上显示问题,但在kitkat上却可以完美显示,有什么想法可以解决此问题? xml文件 不好的看法 ...

9 boost 序列化的向后兼容性问题 1:73

我们正在使用 boost 序列化来写入和读取数据,并且刚刚从 boost 1:67 切换到 boost 1:73。 我们现在无法读回使用 boost 1:67 或之前写入的数据。 我们得到一个 archive_exception::input_stream_error 异常。 检查文件显示了差异。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM