【问题标题】:Pandas backwards compatibility issue with pickle 0.14.1 and 0.15.2Pandas 与 pickle 0.14.1 和 0.15.2 的向后兼容性问题
【发布时间】:2015-01-14 19:35:35
【问题描述】:

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

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

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

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 compiled from source: default pickle behavior changed 来自https://stackoverflow.com/users/644898/jeff 的有用评论

您看到的错误消息 `TypeError: _reconstruct: First argument 必须是ndarray的子​​类型就是python默认的unpickler 确保被腌制的类层次结构正是 和它正在重建的一样。由于系列在版本之间发生了变化 这对于默认的 unpickler 不再可能,(恕我直言,这是 泡菜工作方式的错误)。无论如何,熊猫都会解开 具有 Series 对象的 pre-0.13 泡菜。”

关于变通方法或解决方案的任何想法?

重现错误:

pandas 0.14.1 环境中的设置:

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'))

【问题讨论】:

    标签: python mongodb pandas pickle


    【解决方案1】:

    这是明确提到的 Index 类现在不再是 ndarray 的子类,而是一个 pandas 对象,请参阅 here

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

    【讨论】:

    • +1!,重要的是:即使泡菜不是数据框,这也有效:)!它至少在我的情况下有效,并且我存储了一个包含字符串键和数据框作为值的目录。
    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多