python - 如何在 Python 3.6 中读取/转换包含用 Python 2.7 编写的 pandas 数据帧的 HDF 文件?

标签 python python-3.x python-2.7 pandas

我用 Python 2.7 编写了一个数据帧,但现在我需要在 Python 3.6 中打开它,反之亦然(我想比较用两个版本编写的两个数据帧)。

如果我在 Python 3.6 中使用 pandas 打开 Python2.7 生成的 HDF 文件,则会产生以下错误: UnicodeDecodeError:“ascii”编解码器无法解码位置 1 中的字节 0xde:序号不在范围内(128)

如果我在 Python 2.7 中使用 pandas 打开 Python3.6 生成的 HDF 文件,则会出现以下错误: ValueError:不支持的pickle协议(protocol):4

对于这两种情况,我只是通过 df.to_hdf 保存文件。

有人知道如何解决这个问题吗?

最佳答案

如果原始数据帧的某些列包含列表或字典,则转换为 CSV(由 @irenemeanspeace 提议)将不起作用。

我找到了一种解决方法,可以处理列表和字典等简单对象。 在py27中转为json,然后从py3.6中读取。

# Run this in py2.7
###################################################
import pandas as pd
# read dataframe in py2.7
path = 'df.hdf5' # path to dataframe saved in py2.7
df = pd.read_hdf(path)
json_string = pd.to_json(compression='gzip')
with open('df.json.gz', 'w') as fp:
    fp.write(json_string)


###################################################
# Now run in py3.6
###################################################
import pandas as pd
with open('df.json.gz', 'r') as fp:
    json_string = fp.read()
df = pd.read_json(json_string)

这是更通用的解决方案。

关于python - 如何在 Python 3.6 中读取/转换包含用 Python 2.7 编写的 pandas 数据帧的 HDF 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49108596/

相关文章:

python - 从 spacy 对象中删除命名实体

python - 如何在python 3中将字节作为流读取

python - pytest如何处理调用其他fixtures的fixtures?

python - 如何获取数组内部数组的最小值和最大值?

python - 如何在 Eclipse 中突出显示 python 缩进

python - 没有名为 'sklearn.cross_validation' 的模块

Python:如何最好地解析 csv 并仅计算一个子集的值

python-2.7 - 如何隐藏/删除使用 Kivy 开发的窗口上的默认最小化/最大化按钮?

python-2.7 - Tensorflow while 循环 : dealing with lists

python - numpy:将行中的重复值设置为 0