[英]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.