[英]Convert CSV Data to Nested JSON in Python
I've a requirement to convert CSV Data File to Nested JSON in Python for an application.我需要将应用程序的 CSV 数据文件转换为 Python 中的嵌套 JSON。 My below current Python code is working fine for 1 Customer/Accounts document but somehow not able to create json dump for all the customers in the CSV file.
我下面的当前 Python 代码对 1 个客户/帐户文档工作正常,但不知何故无法为 CSV 文件中的所有客户创建 json 转储。
I am providing the Python code below which will give you some insight on what I am trying to achieve.我在下面提供了 Python 代码,它会让你对我想要实现的目标有一些了解。 Please let me know if any existing resolutions on this.
请让我知道是否有任何关于此的现有决议。
Sample Python CODE:示例 Python 代码:
import pandas as pd
from itertools import groupby
from collections import OrderedDict
import json
df = pd.read_csv('cust.csv', dtype={
"ClientID" : str,
"ClientName" : str,
"AcctID" : str,
"AcctNbr" : str,
"AcctTyp" : str
})
results = []
for (ClientID, ClientName), bag in df.groupby(["ClientID", "ClientName"]):
contents_df = bag.drop(["ClientID", "ClientName"], axis=1)
subset = [OrderedDict(row) for i,row in contents_df.iterrows()]
results.append(OrderedDict([("ClientID", ClientID),("ClientName", ClientName),("subset", subset)]))
print json.dumps(results[0], indent=4)
with open('ExpectedJsonFile.json', 'w') as outfile:
outfile.write(json.dumps(results[0], indent=4))
Sample INPUT CSV:示例输入 CSV:
ClientID,ClientName,AcctID,AcctNbr,AcctTyp
----------------------------------------------------------
00001,John George,812001,812001095,DDA
00001,John George,813002,813002096,SAV
00001,John George,814003,814003097,AFS
00024,Richard Polado,512987,512987085,ML
00024,Richard Polado,512983,512983086,IL
00345,John Cruze,1230,123001567,SAV
00345,John Cruze,5145,514502096,CD
00345,John Cruze,7890,7890033527,SGD
Desired Output JSON:所需的输出 JSON:
{
"clientId":00001,
"ClientName":"John George",
"subset":[
{
"AcctID":812001,
"AcctNbr":"812001095",
"AcctTyp":"DDA",
},
{
"AcctID":813002,
"AcctNbr":"813002096",
"AcctTyp":"SAV",
},
{
"AcctID":814003,
"AcctNbr":"814003097",
"AcctTyp":"AFS",
}
]
},
{
"clientId":00024,
"ClientName":"Richard Polado",
"subset":[
{
"AcctID":512987,
"AcctNbr":"512987085",
"AcctTyp":"ML",
},
{
"AcctID":512983,
"AcctNbr":"512983086",
"AcctTyp":"IL",
}
]
}
and these documents should continue creating for other thousands of clients.这些文件应该继续为其他成千上万的客户创建。
The solution groups by every 'ClientID','ClientName'
pair解决方案按每个
'ClientID','ClientName'
对分组
Your DataFrame你的数据框
df = pd.DataFrame([['00001','John George','812001','812001095','DDA'],
['00001','John George','813002','813002096','SAV'],
['00001','John George','814003','814003097','AFS'],
['00024','Richard Polado','512987','512987085','ML'],
['00024','Richard Polado','512983','512983086','IL'],
['00345','John Cruze','1230','123001567','SAV'],
['00345','John Cruze','5145','514502096','CD'],
['00345','John Cruze','7890','7890033527','SGD']])
df.columns = ['ClientID','ClientName','AcctID','AcctNbr','AcctTyp']
and now现在
finalList = []
finalDict = {}
grouped = df.groupby(['ClientID', 'ClientName'])
for key, value in grouped:
dictionary = {}
j = grouped.get_group(key).reset_index(drop=True)
dictionary['ClientID'] = j.at[0, 'ClientID']
dictionary['ClientName'] = j.at[0, 'ClientName']
dictList = []
anotherDict = {}
for i in j.index:
anotherDict['AcctID'] = j.at[i, 'AcctID']
anotherDict['AcctNbr'] = j.at[i, 'AcctNbr']
anotherDict['AcctTyp'] = j.at[i, 'AcctTyp']
dictList.append(anotherDict)
dictionary['subset'] = dictList
finalList.append(dictionary)
import json
json.dumps(finalList)
gives:给出:
'[
{"ClientID": "00001",
"ClientName": "John George",
"subset":
[{"AcctID": "814003",
"AcctNbr": "814003097",
"AcctTyp": "AFS"},
{"AcctID": "814003",
"AcctNbr": "814003097",
"AcctTyp": "AFS"},
{"AcctID": "814003",
"AcctNbr": "814003097",
"AcctTyp": "AFS"}]
},
{
"ClientID": "00024",
"ClientName": "Richard Polado",
"subset":
[{"AcctID": "512983",
"AcctNbr": "512983086",
"AcctTyp": "IL"},
{"AcctID": "512983",
"AcctNbr": "512983086",
"AcctTyp": "IL"}]
},
{
"ClientID": "00345",
"ClientName": "John Cruze",
"subset":
[{"AcctID": "7890",
"AcctNbr": "7890033527",
"AcctTyp": "SGD"},
{"AcctID": "7890",
"AcctNbr": "7890033527",
"AcctTyp": "SGD"},
{"AcctID": "7890",
"AcctNbr": "7890033527",
"AcctTyp": "SGD"}]
}
]'
Is this how you seem to want it?这就是你想要的样子吗?
Use dictList.append(anotherDict.copy())
otherwise you will get the same dict object in the list.使用
dictList.append(anotherDict.copy())
否则您将在列表中获得相同的 dict 对象。
More details in this question: Create List of Dictionary Python此问题中的更多详细信息: 创建字典 Python 列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.