【发布时间】:2019-11-12 15:49:09
【问题描述】:
我无法读取使用不同版本的 Python pandas 保存的 pickle 文件。我知道以前在这里已经问过这个问题,但是使用pd.read_pickle("my_file.pkl") 提供的解决方案也不起作用。我认为(但我不确定)这些泡菜文件是用比我现在工作的机器更新版本的 pandas 创建的。
很遗憾,我不是管理员,我无法更改 pandas 的版本。如何阅读我的文件?它们是不可恢复的吗?
【问题讨论】:
我无法读取使用不同版本的 Python pandas 保存的 pickle 文件。我知道以前在这里已经问过这个问题,但是使用pd.read_pickle("my_file.pkl") 提供的解决方案也不起作用。我认为(但我不确定)这些泡菜文件是用比我现在工作的机器更新版本的 pandas 创建的。
很遗憾,我不是管理员,我无法更改 pandas 的版本。如何阅读我的文件?它们是不可恢复的吗?
【问题讨论】:
关于您关于 cmets 兼容性的问题,根据 docs related to pickle,“如果选择了兼容的 pickle 协议,pickle 序列化格式保证在 Python 版本之间向后兼容......”如果文件用比您正在阅读的新协议,您可能不走运。
【讨论】:
您将需要与使用 to_pickle 的版本相同(或更高版本)的 pandas。
当 pandas 将数据帧转换为 pickle 时,压缩过程是特定于该版本的。
我建议联系您的管理员并让他们转换pickle to csv,这样您就可以使用任何版本的熊猫打开它。
除非数据框包含对象 csv 应该没问题
【讨论】:
virtualenv,我可以在其中安装更新版本的熊猫。这样就解决了。
对于在单个单元格中包含列表和数组等对象的数据框,而不是转换为 csv 文件,另存为 hdf 工作。
使用最新版本的 python 和 pandas(在我的例子中是 python 3.8 和 pandas 1.4.1)加载数据。
import pandas as pd
import pickle
data = pd.read_pickle('path/to/file.pkl')
将加载的数据保存为hdf文件,设置pickle协议为4,key为数据框
pickle.HIGHEST_PROTOCOL = 4
data.to_hdf('output/folder/path/to/file.hdf', 'df')
使用较旧的 python 加载 hdf 文件(我在 google colab 上使用 Python 3.7 和 pandas 1.3.5)
import pandas as pd
data = pd.read_hdf(path)
【讨论】: