簡體   English   中英

如何讀取/轉換包含Python 3.6中用Python 2.7編寫的pandas數據幀的HDF文件?

[英]How do I read/convert an HDF file containing a pandas dataframe written in Python 2.7 in Python 3.6?

我在Python 2.7中編寫了一個數據幀,但現在我需要在Python 3.6中打開它,反之亦然(我想比較兩個版本中編寫的兩個數據幀)。

如果我在Python 3.6中使用pandas打開Python2.7生成的HDF文件,則會產生錯誤: UnicodeDecodeError: 'ascii' codec can't decode byte 0xde in position 1: ordinal not in range(128)

如果我在Python 2.7中使用pandas打開Python3.6生成的HDF文件,則會出現錯誤: ValueError: unsupported pickle protocol: 4

對於這兩種情況,我只是通過df.to_hdf保存文件。

有沒有人知道如何解決這個問題?

如果原始數據框的某些列包含列表或dicts,則轉換為CSV(由@irenemeanspeace提議)將不起作用。

我找到了一個解決方法,可以處理像列表和dicts這樣的簡單對象。 在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版本中的文件並將其保存為CSV文件,然后可以讀取任何版本的Python。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM