我需要將一個Pandas DataFrame以及一些元數據保存爲JSON格式的文件。 (JSON格式是必需的。)將Pandas DataFrame和元數據保存爲JSON格式
背景
A)我可以成功讀取/使用DataFrame.to_json()
和DataFrame.from_json()
/JSON來寫我相當大的熊貓數據幀。沒問題。
B)我沒有問題救了我的元數據(字典),以JSON使用json.dump()
/json.load()
我第一次嘗試
由於大熊貓不直接支持數據幀的元數據,我首先想到的是到
top_level_dict = {}
top_level_dict['data'] = df.to_dict()
top_level_dict['metadata'] = {'some':'stuff'}
json.dump(top_level_dict, fp)
種失效模式
C)我發現,即使
df_dict = df.to_dict()
json.dump(df_dict, fp)
簡化的情況下失敗:
TypeError: key (u'US', 112, 5, 80, 'wl') is not a string
d)調查,我發現,補還失敗。
df.to_json(fp)
json.load(fp)
失敗
384 raise ValueError("No JSON object could be decoded")
ValueError: Expecting : delimiter: line 1 column 17 (char 16)
所以看來熊貓JSON格式和Python的JSON庫是不兼容的。
我首先想到的是追跌的方式來修改df.to_dict()
輸出Ç,使其適合於Python的JSON庫,但我不斷聽到「如果你努力做一些事情在Python,你可能做錯了。「在我的腦子裏。
問題
什麼是添加元數據到數據幀的熊貓和存儲到一個JSON格式文件cannonical /推薦的方法?
的Python 2.7.10
熊貓0.17
編輯1:
雖然嘗試了埃文萊特的偉大答案,我發現我的問題的根源:熊貓(截至0.17)不喜歡儲蓄多索引數據框到JSON。在調用DataFrame.to_json()
之前,我爲保存我的(多重索引)數據幀而創建的庫在安靜地執行df.reset_index()
。我的新代碼不是。所以這是DataFrame.to_json()
打在MultiIndex上。
教訓:閱讀文檔的孩子,即使它是你自己的文檔。
編輯2:
如果需要同時存儲數據幀,並在單 JSON對象的元數據,請參閱我的回答如下。
寫在文件中兩個獨立的字符串。好的技術。 –