Pandas转D3. 将数据框序列化为JSON

9 投票
2 回答
2664 浏览
提问于 2025-04-18 05:45

我有一个数据表,里面有一些列,而且没有重复的数据:

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

这些数据可以看作是一个层级结构,像这样:

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

我想把这个层级结构转换成一个JSON对象。

如果有人感兴趣的话,我这么做的原因是想最终制作一个像这个的可视化图表,而这个图表需要一个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来标识)

在Pandas/Python中,有没有简单的方法可以做到这一点呢?

2 个回答

1

这里有另一个脚本,可以把一个 pandas 数据框(df)转换成一个 flare.json 文件。你可以在这里找到这个脚本: https://github.com/andrewheekin/csv2flare.json

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)

如果能用向量化的方法来解决问题,那会更好,或者可以利用一下分组操作的速度,但我现在想不出这样的解决方案。

另外,可以看看 df.groupby(...).groups,这个会返回一个字典。

还可以参考一下 这个回答

撰写回答