我现在已经将当前的问题添加到了GitHub上。请查找存储库的URL。我还包括了一个Jupyter笔记本,其中也解释了这个问题。谢谢大家。
https://github.com/simongraham/dataExplore.git
我目前正在处理一个与营养相关的项目,其中数据以原始JSON格式存储。我想使用Python和Pandas获取一个易于理解的数据框架。我知道当JSON不是嵌套的时候,这是一个简单的任务。在这种情况下,我会使用:
nutrition = pd.read_json('data')
然而,我有嵌套信息,很难将其放入合理的数据框中。JSON格式如下,其中nutritionNutrients元素本身是一个嵌套元素。此元素的嵌套描述了各种内容的营养成分,例如包括酒精和bcfa。由于这是一个大型数据文件,因此仅包含样例。
[
{
"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": ""
},
...
]
}
]
希望得到任何帮助。
谢谢。
.... ....
现在我已经找到了使用json_normalize解决这个问题的方法,但是这次我的代码嵌套了两次。也就是说:
[
{
...
}
[,
"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": ""
},
...
}
]
}
]
当我有一个仅包含营养数据的JSON时,我可以使用以下方法:
nutrition = (pd.io
.json
.json_normalize((data, ['nutritionPortions']), 'nutritionNutrients',
['vcNutritionId','vcUserId','vcPortionId','vcPortionName','vcPortionSize',
'ftEnergyKcal','vcPortionUnit','dtConsumedDate'])
)
然而,我的数据不仅包含营养信息。例如,它会包含活动信息,因此营养信息在开头嵌套了“nutrtitionPortions”。假设所有其他列都不是嵌套的,它们由“Activity”和“Wellbeing”表示。
如果我使用以下代码:
nutrition = (pd.io
.json
.json_normalize(data, ['nutritionPortions'])
)
我将回归最初的问题,即“nutritionNutrients”嵌套的位置,但是我无法成功地获取相应的数据框架。
谢谢。
data['nutritionPortions']
而不是data
给json_normalize
函数。 - MaxU - stand with Ukrainedata = [...]
,可以在Python中执行而不会出现错误。或者,您可以将数据上传到某个地方并在问题中发布该文件的链接... - MaxU - stand with Ukraine