从 pandas 数据框创建一个 json 对象
Posted
技术标签:
【中文标题】从 pandas 数据框创建一个 json 对象【英文标题】:creating a json object from pandas dataframe 【发布时间】:2021-01-09 07:24:42 【问题描述】: Groups sub-groups selections
0 sg1 csg1 sc1
1 sg1 csg1 sc2
2 sg1 csg2 sc3
3 sg1 csg2 sc4
4 sg2 csg3 sc5
5 sg2 csg3 sc6
6 sg2 csg4 sc7
7 sg2 csg4 sc8
我有上面提到的数据框,我正在尝试创建一个 JSON 对象,如下所示:
"sg1":
"csg1": ['sc1', 'sc2'],
"csg2": ['sc3', 'sc4']
,
"sg2":
"csg3": ['sc5', 'sc6'],
"csg4": ['sc7', 'sc8']
我尝试使用带有 orient 参数的 pandas to_json 和 to_dict,但我没有得到预期的结果。我还尝试按列分组,然后创建列表并将其转换为 JSON。
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:您可以groupby
['Groups','sub-groups']
并使用字典理解从多索引系列构建字典:
s = df.groupby(['Groups','sub-groups']).selections.agg(list)
d = k1:k2:v for (k1,k2),v in s.iteritems()
print(d)
# 'sg1': 'csg2': ['sc3', 'sc4'], 'sg2': 'csg4': ['sc7', 'sc8']
【讨论】:
【参考方案2】:您需要对感兴趣的列进行分组,例如:
import pandas as pd
data =
'Groups': ['sg1', 'sg1', 'sg1', 'sg1', 'sg2', 'sg2', 'sg2', 'sg2'],
'sub-groups': ['csg1', 'csg1', 'csg2', 'csg2', 'csg3', 'csg3', 'csg4', 'csg4'],
'selections': ['sc1', 'sc2', 'sc3', 'sc4', 'sc5', 'sc6', 'sc7', 'sc8']
df = pd.DataFrame(data)
print(df.groupby(['Groups', 'sub-groups'])['selections'].unique().to_dict())
输出是:
('sg1', 'csg1'): array(['sc1', 'sc2'], dtype=object),
('sg1', 'csg2'): array(['sc3', 'sc4'], dtype=object),
('sg2', 'csg3'): array(['sc5', 'sc6'], dtype=object),
('sg2', 'csg4'): array(['sc7', 'sc8'], dtype=object)
【讨论】:
【参考方案3】:让我们试试dictify
函数,它使用来自Groups
的***键和来自sub-groups
的相应子级键构建一个嵌套字典:
from collections import defaultdict
def dictify():
dct = defaultdict(dict)
for (x, y), g in df.groupby(['Groups', 'sub-groups']):
dct[x][y] = [*g['selections']]
return dict(dct)
# dictify()
"sg1":
"csg1": ["sc1","sc2"],
"csg2": ["sc3","sc4"]
,
"sg2":
"csg3": ["sc5","sc6"],
"csg4": ["sc7","sc8"]
【讨论】:
以上是关于从 pandas 数据框创建一个 json 对象的主要内容,如果未能解决你的问题,请参考以下文章