熊猫到D3。将数据帧序列化为JSON

时间:2014-05-08 01:21:27

标签: python json d3.js pandas

我有一个包含以下列的DataFrame,没有重复项:

['region', 'type', 'name', 'value']

可以看作层次结构如下

grouped = df.groupby(['region','type', 'name'])

我想将此层次结构序列化为JSON对象。

如果有人感兴趣,这背后的动机是最终整合像this one这样需要JSON文件的可视化。

为此,我需要将grouped转换为以下内容:

new_data['children'][i]['name'] = region
new_data['children'][i]['children'][j]['name'] = type
new_data['children'][i]['children'][j]'children'][k]['name'] = name
new_data['children'][i]['children'][j]'children'][k]['size'] = value
...

其中regiontypename对应于层次结构的不同级别(由ijk索引<) / p>

Pandas / Python有一种简单的方法吗?

2 个答案:

答案 0 :(得分:3)

沿着这些方向的东西可能会让你到那里。

from collections import defaultdict

tree = lambda: defaultdict(tree)  # a recursive defaultdict
d = tree()
for _, (region, type, name, value) in df.iterrows():
    d['children'][region]['name'] = region
    ...

json.dumps(d)

矢量化解决方案会更好,也许可以利用groupby的速度,但我想不出这样的解决方案。

另请查看返回字典的df.groupby(...).groups

另见this answer

答案 1 :(得分:1)

这是另一个获取pandas df并输出flare.json文件的脚本:https://github.com/andrewheekin/csv2flare.json