Pandas转D3. 将数据框序列化为JSON
我有一个数据表,里面有一些列,而且没有重复的数据:
['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
...
其中region
、type
和name
对应层级结构的不同级别(分别用i
、j
和k
来标识)
在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
,这个会返回一个字典。
还可以参考一下 这个回答。