2016-06-25 8 views
0

JSONデータを適切なデータフレームにするにはどうすればよいですか?私は大きなデータフレームに入ることを目指して、深くネストされたファイルを持っています。すべては、以下のGithubリポジトリ内describedです:データの探索パンダのJSONネストされたデータ

http://www.github.com/simongraham/dataExplore.git

+3

を外部にリンクしないでください。大きなJSONの栄養セグメントのために、すべてのnutritionPortionsレベルを反復処理し、各時間はパンダの正規化を実行すると、最終的なデータフレームに連結考えます大きなデータファイルを持つリソース代わりに、あなたのポストにあなたのデータの代表的な*サンプル*を含めてください。 – BrenBarn

答えて

1

ネストされたjsonsでは、あなたが必要なセグメントを抽出し、レベルを介して歩く必要があります。

import pandas as pd 
import json 

with open('/Users/simongraham/Desktop/Kaido/Data/kaidoData.json') as f: 
    data = json.load(f) 

# INITIALIZE DF 
nutrition = pd.DataFrame() 

# ITERATIVELY CONCATENATE 
for item in data[0]["nutritionPortions"]:  
    if 'ftEnergyKcal' in item.keys():  # MISSING IN 3 OF 53 LEVELS 
     temp = (pd.io 
      .json 
      .json_normalize(item, 'nutritionNutrients', 
       ['vcNutritionId','vcUserId','vcPortionId','vcPortionName','vcPortionSize', 
       'ftEnergyKcal', 'vcPortionUnit','dtConsumedDate']) 
      ) 
     nutrition = pd.concat([nutrition, temp]) 

nutrition.head() 

出力

ftValue nPercentRI vcNutrient     vcNutritionPortionId \ 
0  0.00   0.0  alcohol c993ac30-ecb4-4154-a2ea-d51dbb293f66 
1  0.00   0.0   bcfa c993ac30-ecb4-4154-a2ea-d51dbb293f66 
2  7.80   6.0  biotin c993ac30-ecb4-4154-a2ea-d51dbb293f66 
3 49.40   2.0  calcium c993ac30-ecb4-4154-a2ea-d51dbb293f66 
4  1.82   0.0 carbohydrate c993ac30-ecb4-4154-a2ea-d51dbb293f66 

    vcTrafficLight vcUnit  dtConsumedDate \ 
0      g 2016-04-12T00:00:00 
1      g 2016-04-12T00:00:00 
2     µg 2016-04-12T00:00:00 
3     mg 2016-04-12T00:00:00 
4      g 2016-04-12T00:00:00 

          vcNutritionId ftEnergyKcal \ 
0 070b97a4-d562-427d-94a8-1de1481df5d1   18.2 
1 070b97a4-d562-427d-94a8-1de1481df5d1   18.2 
2 070b97a4-d562-427d-94a8-1de1481df5d1   18.2 
3 070b97a4-d562-427d-94a8-1de1481df5d1   18.2 
4 070b97a4-d562-427d-94a8-1de1481df5d1   18.2 

           vcUserId vcPortionName vcPortionSize \ 
0 fe585e3d-2863-46fe-a41f-290bf58ad169   1 mug   260 
1 fe585e3d-2863-46fe-a41f-290bf58ad169   1 mug   260 
2 fe585e3d-2863-46fe-a41f-290bf58ad169   1 mug   260 
3 fe585e3d-2863-46fe-a41f-290bf58ad169   1 mug   260 
4 fe585e3d-2863-46fe-a41f-290bf58ad169   1 mug   260 

    vcPortionId vcPortionUnit 
0   2   ml 
1   2   ml 
2   2   ml 
3   2   ml 
4   2   ml 
+0

非常にスムーズに動作する@parfaitありがとうございます。これで、各列を個別に解析してデータフレームにすることができます。これを行い、各データフレームを並列に連結するのは良い手順ですか?あるいは可能な限り、これをすべて1回で行うのが最善でしょうか? – simongraham

+1

よろしくお願いします!それぞれのデータフレームを連結して連結しないでください。正規化されたプロシージャは、すべてではなく、1つの異なるセットをとります。あなたが 'temp'を使わなかったのは、最後の' nutritionPortions'だけループが 'nutrition'dfを置き換えて保持するためです。 – Parfait

関連する問題