Sto cercando una tecnica Python per costruire un file JSON nidificato da una tabella piatta in un frame di dati panda. Per esempio come potrebbe un tavolo frame di dati panda come ad esempio:Come creare un file JSON con record annidati da una tabella di dati flat?
teamname member firstname lastname orgname phone mobile
0 1 0 John Doe Anon 916-555-1234
1 1 1 Jane Doe Anon 916-555-4321 916-555-7890
2 2 0 Mickey Moose Moosers 916-555-0000 916-555-1111
3 2 1 Minny Moose Moosers 916-555-2222
preso e esportati in un JSON che assomiglia:
{
"teams": [
{
"teamname": "1",
"members": [
{
"firstname": "John",
"lastname": "Doe",
"orgname": "Anon",
"phone": "916-555-1234",
"mobile": "",
},
{
"firstname": "Jane",
"lastname": "Doe",
"orgname": "Anon",
"phone": "916-555-4321",
"mobile": "916-555-7890",
}
]
},
{
"teamname": "2",
"members": [
{
"firstname": "Mickey",
"lastname": "Moose",
"orgname": "Moosers",
"phone": "916-555-0000",
"mobile": "916-555-1111",
},
{
"firstname": "Minny",
"lastname": "Moose",
"orgname": "Moosers",
"phone": "916-555-2222",
"mobile": "",
}
]
}
]
}
Ho provato a fare questo con la creazione di un dict di dicts e il dumping a JSON. Questo è il mio codice corrente:
data = pandas.read_excel(inputExcel, sheetname = 'SCAT Teams', encoding = 'utf8')
memberDictTuple = []
for index, row in data.iterrows():
dataRow = row
rowDict = dict(zip(columnList[2:], dataRow[2:]))
teamRowDict = {columnList[0]:int(dataRow[0])}
memberId = tuple(row[1:2])
memberId = memberId[0]
teamName = tuple(row[0:1])
teamName = teamName[0]
memberDict1 = {int(memberId):rowDict}
memberDict2 = {int(teamName):memberDict1}
memberDictTuple.append(memberDict2)
memberDictTuple = tuple(memberDictTuple)
formattedJson = json.dumps(memberDictTuple, indent = 4, sort_keys = True)
print formattedJson
Questo produce il seguente output. Ogni elemento è nidificato al livello corretto in "teamname" 1 o 2, ma i record devono essere nidificati insieme se hanno lo stesso teamname. Come posso risolvere questo problema in modo che teamname 1 e teamname 2 abbiano ciascuno 2 record annidati all'interno?
[
{
"1": {
"0": {
"email": "[email protected]",
"firstname": "John",
"lastname": "Doe",
"mobile": "none",
"orgname": "Anon",
"phone": "916-555-1234"
}
}
},
{
"1": {
"1": {
"email": "[email protected]",
"firstname": "Jane",
"lastname": "Doe",
"mobile": "916-555-7890",
"orgname": "Anon",
"phone": "916-555-4321"
}
}
},
{
"2": {
"0": {
"email": "[email protected]",
"firstname": "Mickey",
"lastname": "Moose",
"mobile": "916-555-1111",
"orgname": "Moosers",
"phone": "916-555-0000"
}
}
},
{
"2": {
"1": {
"email": "[email protected]",
"firstname": "Minny",
"lastname": "Moose",
"mobile": "none",
"orgname": "Moosers",
"phone": "916-555-2222"
}
}
}
]
Sfortunatamente le domande sul fatto che un approccio di alto livello a un problema sia buono/corretto/possibile/ecc. Non sono sfortunatamente considerate in questo argomento. Detto questo, penso che l'approccio "a parole" * sembri promettente. Dovresti usare l'altra domanda per risolvere i dettagli rimanenti, ma ricorda di aggiornare i messaggi di errore che stai ricevendo * e * il codice che stai utilizzando, in modo che siano sincronizzati (altrimenti i tuoi problemi non sono riproducibili) . –
Ho anche provato ad adattare questa risposta: http://stackoverflow.com/questions/24374062/pandas-groupby-to-nested-json, ma ancora nessun dado. – spaine