Ora ho aggiunto il problema corrente su GitHib. Si prega di trovare l'URL per il repo. Ho incluso un taccuino Jupyter che spiega anche il problema. Grazie ragazzi.visualizzazione di dati JSON nidificati in un dataframe panda
https://github.com/simongraham/dataExplore.git
Attualmente sto lavorando con i dati nutrizionali per un progetto, in cui i dati sono in formato JSON cruda, e voglio usare Python e panda per ottenere un frame di dati comprensibile. Capisco che questo è un compito facile quando il JSON non è annidato. Qui vorrei usare:
nutrition = pd.read_json('data')
Tuttavia, ho annidato le informazioni e trovo molto difficile inserirlo in un frame di dati ragionevole. Il formato JSON è il seguente, in cui l'elemento nutritionNutrients stesso è un elemento nidificato. Il nido per questo elemento descriverà i contenuti nutrizionali per una varietà di cose diverse come l'alcol e il bcfa, come incluso. Ho incluso solo un esempio perché si tratta di un file di dati di grandi dimensioni.
[
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutritionId": "2476378b-79ee-4857-a81d-489661a039a1",
"vcUserId": "cc51145b-5a70-4344-9b55-1a4455f0a9d2",
"vcPortionId": "1",
"vcPortionName": "1 average pepper",
"vcPortionSize": "20",
"ftEnergyKcal": 5.2,
"vcPortionUnit": "g",
"dtConsumedDate": "2016-05-04T00:00:00",
"nutritionNutrients": [
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutrient": "alcohol",
"ftValue": 0,
"vcUnit": "g",
"nPercentRI": 0,
"vcTrafficLight": ""
},
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutrient": "bcfa",
"ftValue": 0,
"vcUnit": "g",
"nPercentRI": 0,
"vcTrafficLight": ""
},
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutrient": "biotin",
"ftValue": 0,
"vcUnit": "µg",
"nPercentRI": 0,
"vcTrafficLight": ""
},
...
]
}
]
Qualsiasi aiuto sarebbe apprezzato.
Grazie.
.... ....
Ora che ho trovato il modo di risolvere questo problema utilizzando json_normalize, mi restituiscono lo stesso problema, ma questa volta il mio codice è nidificato due volte. Vale a dire:
[
{
...
}
[,
"nutritionPortions": [
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutritionId": "2476378b-79ee-4857-a81d-489661a039a1",
"vcUserId": "cc51145b-5a70-4344-9b55-1a4455f0a9d2",
"vcPortionId": "1",
"vcPortionName": "1 average pepper",
"vcPortionSize": "20",
"ftEnergyKcal": 5.2,
"vcPortionUnit": "g",
"dtConsumedDate": "2016-05-04T00:00:00",
"nutritionNutrients": [
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutrient": "alcohol",
"ftValue": 0,
"vcUnit": "g",
"nPercentRI": 0,
"vcTrafficLight": ""
},
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutrient": "bcfa",
"ftValue": 0,
"vcUnit": "g",
"nPercentRI": 0,
"vcTrafficLight": ""
},
{
"vcNutritionPortionId": "478d1905-f264-4d9b-ab76-0ed4252193fd",
"vcNutrient": "biotin",
"ftValue": 0,
"vcUnit": "µg",
"nPercentRI": 0,
"vcTrafficLight": ""
},
...
}
]
}
]
Quando ho un JSON composto da solo i dati nutrizione posso usare:
nutrition = (pd.io
.json
.json_normalize((data, ['nutritionPortions']), 'nutritionNutrients',
['vcNutritionId','vcUserId','vcPortionId','vcPortionName','vcPortionSize',
'ftEnergyKcal','vcPortionUnit','dtConsumedDate'])
)
Tuttavia, il mio dati non solo contiene informazioni nutrizionali. Ad esempio conterrà informazioni sull'attività e quindi le informazioni nutrizionali sono annidate con "nutrtitionPortions" all'inizio. Supponiamo che tutte le altre colonne non siano nidificate e che siano rappresentate da "Attività" e "Benessere".
Se uso il codice:
nutrition = (pd.io
.json
.json_normalize(data, ['nutritionPortions'])
)
tornerò al problema originale dove "nutritionNutrients" è annidati, ma sto avendo alcun successo poi ottenere il corrispondente frame di dati.
Grazie
@simongraham, sono contento di aver potrebbe aiutare. :) Si prega di considerare [accettare] (http://meta.stackexchange.com/a/5235) la risposta più utile - questo indicherà anche che la tua domanda ha avuto risposta. – MaxU
Non credo che tu possa darmi una mano con la mia ultima modifica del problema attuale. Grazie :) – simongraham
@simongraham, penso che dovresti passare qualcosa come 'data ['nutritionPortions']' invece di 'data' a' json_normalize' – MaxU