我们使用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楼 票数:6

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

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

  ask by Mike D translate from so

未解决问题?本站智能推荐:

1回复

如何通过pandas而不是从文件加载pickle

以前的代码: 有一个错误:ImportError:没有名为indexes.base的模块。 这是由于服务器和客户端之间的pandas版本不一致造成的。 我通过更改代码来解决问题: 它可以解决问题。 但我的问题是有更快的方法加载pickle对象而不是将其存储到文件系统然后读取
1回复

Python性能问题 - 从特定的Pickle文件中读取相同Pandas数据帧的多个方法

我们有多个(4)方法从特定/相同的文件中读取相同的Pandas数据框 - 存储在本地目录中的Pickle文件。 代码创建唯一的pickle文件如下: - 读取pickle文件的方法的代码片段如下: - 如上所述,我对性能的关注是 - 这会更好还是应该将DF腌制成4个单独的P
2回复

Pickle中的Pandas对象-IDE未知的类型

在Python中,当我键入以下内容时,请使用IDE PyCharm: 然后,IDE识别df是Pandas Dataframe,并在以后键入代码时给我一些有用的建议。 但是,如果我从Pickle中导入数据框,则通过: 然后,IDE无法识别df的类型,并且不再对我有所帮助。
1回复

如何从pickle文件中获取数据到pandas数据框中

我正在为一个班级进行社交媒体情绪分析。 我已经将所有关于肯塔基德比的推文保存到 pkl 文件中,为期 2 个月。 我的问题是:如何将所有这些泡菜转储文件加载到数据框中? 这是我的代码:
1回复

从源代码编译的Pandas:默认的pickle行为发生了变化

我刚刚从源代码编译和安装了pandas(克隆的github repo, >>> setup.py install )。 碰巧的是,对象序列化/反序列化的模块pickle的默认行为发生了变化,可能被pandas内部模块部分覆盖了。 我有一些通过“标准” pickle序
1回复

在 Pandas 中,如何读取抛出 Unpickling Error: invalid load key 的 Pickle 文件?

我正在阅读泡菜文件: 它抛出这个错误: 请注意,我已经看到其他线程在保存泡菜文件时如何解决这个问题,但在我的情况下,我只需要打开这个特定的数据框。 泡菜文件也可能包含一些特殊字符。
1回复

ValueError:不支持的pickle协议:4个带有pandas

我收到这个错误 从我的代码行 使用python2.7运行脚本时 (在Ubuntu 14.04.5上,3.13.0-95-通用) 感谢帮助。
1回复

pandas.DataFrame.to_pickle向后兼容

在pandas 0.20中引入了pandas.DataFrame.to_pickle的压缩参数。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_pickle.html 在熊猫0.20之