JS.*_*JS. 3 json python-2.7 pandas
我需要将 Pandas DataFrame 以及一些元数据保存到 JSON 格式的文件中。(JSON 格式是必需的。)
背景
A)我可以使用DataFrame.to_json()和成功地从/向 JSON 读取/写入我相当大的 Pandas 数据帧DataFrame.from_json()。没问题。
B)我使用json.dump()/将元数据 (dict) 保存到 JSON 没有问题json.load()
我的第一次尝试
由于 Pandas 不直接支持 DataFrame 元数据,我的第一个想法是
top_level_dict = {}
top_level_dict['data'] = df.to_dict()
top_level_dict['metadata'] = {'some':'stuff'}
json.dump(top_level_dict, fp)
Run Code Online (Sandbox Code Playgroud)
故障模式
C) 我发现即使是简化的情况
df_dict = df.to_dict()
json.dump(df_dict, fp)
Run Code Online (Sandbox Code Playgroud)
失败:
TypeError: key (u'US', 112, 5, 80, 'wl') is not a string
Run Code Online (Sandbox Code Playgroud)
D)调查,我发现补体也失败了。
df.to_json(fp)
json.load(fp)
Run Code Online (Sandbox Code Playgroud)
失败
384 raise ValueError("No JSON object could be decoded")
ValueError: Expecting : delimiter: line 1 column 17 (char 16)
Run Code Online (Sandbox Code Playgroud)
所以看起来 Pandas JSON 格式和 Python 的 JSON 库不兼容。
我的第一个想法是寻找一种方法来修改C的df.to_dict()输出,使其适合 Python 的 JSON 库,但我一直听到“如果你在 Python 中努力做某事,你可能做错了。” 在我脑海中。
问题
将元数据添加到 Pandas DataFrame 并存储到 JSON 格式文件的规范/推荐方法是什么?
Python 2.7.10
熊猫 0.17
编辑 1:
在尝试 Evan Wright 的出色答案时,我发现了问题的根源:Pandas(从 0.17 开始)不喜欢将多索引数据帧保存为 JSON。我为保存我的(多索引)数据帧而创建的库df.reset_index()在调用DataFrame.to_json(). 我的新代码不是。所以它DataFrame.to_json()在 MultiIndex 上打嗝。
教训:阅读文档孩子,即使它是您自己的文档。
编辑2:
如果您需要将 DataFrame 和元数据存储在单个JSON 对象中,请参阅下面的答案。
小智 5
您应该能够将数据放在单独的行上。
写作:
f = open('test.json', 'w')
df.to_json(f)
print >> f
json.dump(metadata, f)
Run Code Online (Sandbox Code Playgroud)
读:
f = open('test.json')
df = pd.read_json(next(f))
metdata = json.loads(next(f))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2217 次 |
| 最近记录: |