我需要将一个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对象的元数据,请参阅我的回答如下。
写在文件中两个独立的字符串。好的技术。 –