[英]Convert CSV Data to Nested JSON
我的任務是使用 python 將 csv 文件中的數據轉換為嵌套的 JSON 文件,用於 Z2567A5EC9705EB7AC2DZ98403 用法。 我試過這篇文章中的 Python 代碼。 所需的 output 將是一個member_id
在 JSON 文件中顯示一次,與一個member_id
下的tag_name
相同。 問題是,當我嘗試僅使用member_id
的groupby
時,例如tag_name
'm1' 會在 'abc123' 下顯示多次。 如果我同時使用member_id
和tag_name
嘗試groupby
,則標簽“m1”和“m2”會出現兩次“abc123”。 我已經用谷歌搜索了一段時間,但大多數分辨率只針對一個嵌套(不確定我是否使用了正確的術語)。 請讓我知道是否有任何可能的方法來做到這一點。
示例代碼:
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)
詳細信息。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
所需的 Output 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"}]}]}
我不知道 pandas 函數允許直接實現這一點。 此外,您引入的密鑰不屬於您的初始 dataframe( tag
、 detail
)。 因此,實施通用解決方案似乎很困難。
但是,如果您的列數不超過問題中所述的列數,則可以通過 dataframe 將 go 逐列分組:
result = []
for member_id, member_df in df.groupby('member_id'):
member_dict = {'member_id': member_id}
member_dict['tag'] = []
for tag_name, tag_df in member_df.groupby('tag_name'):
tag_dict = {'tag_name': tag_name}
tag_dict['detail'] = []
for detail_name, detail_df in tag_df.groupby('detail_name'):
detail_dict = {'detail_name': detail_name}
detail_dict['detail_value'] = detail_df.detail_value.mean() # should be only one value, taking 'mean' just in case
tag_dict['detail'].append(detail_dict)
member_dict['tag'].append(tag_dict)
result.append(member_dict)
print(json.dumps(result, indent=4))
Output:
[
{
"member_id": "abc123",
"tag": [
{
"tag_name": "m1",
"detail": [
{
"detail_name": "Service_A",
"detail_value": 20.0
},
{
"detail_name": "Service_B",
"detail_value": 20.0
}
]
},
{
"tag_name": "m2",
"detail": [
{
"detail_name": "Service_C",
"detail_value": 10.0
}
]
}
]
},
{
"member_id": "xyz456",
"tag": [
{
"tag_name": "m3",
"detail": [
{
"detail_name": "Service A",
"detail_value": 5.0
}
]
}
]
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.