【发布时间】:2022-01-07 00:44:00
【问题描述】:
我的任务是使用 python 将数据从 csv 文件转换为嵌套的 JSON 文件以供 Web 使用。我在this article 中尝试了 Python 代码。所需的输出将是一个 member_id 在 JSON 文件中显示一次,对于一个 member_id 下的 tag_name 相同。问题是,当我尝试仅使用member_id 的groupby 时,tag_name 'm1' 会在'abc123' 下多次显示。如果我尝试使用groupby 和member_id 和tag_name,'abc123' 将针对标签'm1' 和'm2' 出现两次。我已经用谷歌搜索了一段时间,但大多数分辨率只针对一个嵌套(不确定我是否使用了正确的术语)。如果有任何可能的方法,请告诉我。
示例代码:
import json
import pandas as pd
df = pd.read_csv('../detail.csv', sep=',', header=0
, index_col=False
, dtype = {'member_id':str,'tag_name':str,'detail_name':str,'detail_value':str} )
group = df.groupby(['member_id','tag_name'])
finalList, finalDict = [], {}
for key, value in group:
dictionary, dictionary1, dictList, dictList1 = {}, {}, [], []
j = group.get_group(key).reset_index(drop=True)
dictionary['member_id'] = j.at[0,'member_id']
dictionary1['tag_name'] = j.at[0,'tag_name']
for i in j.index:
anotherDict = {}
anotherDict['detail_name'] = j.at[i,'detail_name']
anotherDict['detail_value'] = j.at[i,'detail_value']
dictList1.append(anotherDict.copy())
dictionary1['detail'] = dictList1
dictList.append(dictionary1)
dictionary['tag'] = dictList
finalList.append(dictionary)
json.dumps(finalList,ensure_ascii = False)
detail.csv:
member_id, tag_name, detail_name, detail_value
-------------------------------------------------------
abc123, m1, Service_A, 20
abc123, m1, Service_B, 20
abc123, m2, Service_C, 10
xyz456, m3, Service A, 5
xyz456, m3, Service A, 10
所需的输出 JSON:
{ "member_id": "abc123",
"tag":[ {"tag_name": "m1",
"detail":[{ "detail_name": "Service_A",
"detail_value": "20"},
{ "detail_name": "Service_B",
"detail_value": "20"}]},
{"tag_name": "m2",
"detail":[{ "detail_name": "Service_C",
"detail_value": "10"}]}]},
{ "member_id": "xyz456",
"tag":[{"tag_name": "m3",
"detail":[{ "detail_name": "Service_A",
"detail_value": "5"},
{ "detail_name": "Service_A",
"detail_value": "10"}]}]}
【问题讨论】:
-
请分享您当前的代码。
-
@balderman 添加。
标签: python json python-3.x