2016-06-23 27 views
5

में नेस्टेड JSON डेटा को देखने मैं अब GitHib पर वर्तमान समस्या जोड़ लिया है। रेपो के लिए यूआरएल पाएं। मैंने एक जुपीटर नोटबुक भी शामिल किया है जो समस्या को भी समझाता है। धन्यवाद दोस्तों।एक पांडा dataframe

https://github.com/simongraham/dataExplore.git


मैं वर्तमान में एक परियोजना है, जहां डेटा कच्चे JSON प्रारूप में है के लिए पोषक तत्वों की डेटा के साथ काम कर रहा हूँ, और मैं एक समझ में आता डेटा फ्रेम प्राप्त करने के लिए अजगर और पांडा उपयोग करना चाहते हैं। मैं समझता हूं कि यह एक आसान काम है जब JSON नेस्टेड नहीं किया जाता है। यहां मैं उपयोग करूंगा:

nutrition = pd.read_json('data') 

हालांकि मुझे जानकारी निहित है और मुझे इसे उचित डेटा फ्रेम में लाने में बहुत मुश्किल लग रही है। जेएसओएन प्रारूप निम्नानुसार है, जहां पोषण पोषक तत्व तत्व स्वयं एक घोंसला तत्व है। इस तत्व के लिए घोंसला शराब और बीसीएफए जैसी विभिन्न चीजों के लिए पौष्टिक सामग्री का वर्णन करेगा। मैंने केवल नमूना शामिल किया है क्योंकि यह एक बड़ी डेटा फ़ाइल है।

[ 
     { 
      "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']) 
) 

हालांकि, अपने डेटा न केवल पोषण जानकारी होती है। उदाहरण के लिए इसमें गतिविधि की जानकारी होगी, और इसलिए पोषण की जानकारी शुरुआत में "पोषण विभाग" के साथ घिरा हुआ है। आइए मान लें कि अन्य सभी कॉलम घोंसला नहीं हैं और इन्हें "गतिविधि" और "वेलबींग" द्वारा दर्शाया जाता है।

अगर मैं कोड का उपयोग करें:

nutrition = (pd.io 
    .json 
    .json_normalize(data, ['nutritionPortions']) 
) 

मैं मूल समस्या जहां "nutritionNutrients" नीडिंत है वापस आ जाएगी, लेकिन मैं तो इसी डेटा फ्रेम प्राप्त करने के कोई सफलता हो रहा है।

धन्यवाद

उत्तर

4

अद्यतन: यह आपके kaidoData.json फ़ाइल के लिए काम करना चाहिए:

df = (pd.io 
     .json 
     .json_normalize(data[0]['ionPortions'], 'nutritionNutrients', 
      ['vcNutritionId','vcUserId','vcPortionId','vcPortionName','vcPortionSize', 
      'dtCreatedDate','dtUpdatedDate','nProcessingStatus', 
      'vcPortionUnit','dtConsumedDate' 
      ] 
     ) 
) 

पी एस मैं क्या 'ftEnergyKcal' के साथ कुछ गलत है पता नहीं है - यह मेरे फेंकता है:

KeyError: 'ftEnergyKcal'

शायद यह कुछ वर्गों में अनुपलब्ध है

पुराने जवाब:

उपयोग json_normalize():

(pd.io 
    .json 
    .json_normalize(l, 'nutritionNutrients', 
     ['vcNutritionId','vcUserId','vcPortionId','vcPortionName','vcPortionSize', 
     'ftEnergyKcal','vcPortionUnit','dtConsumedDate']) 
) 

डेमो:

In [107]: (pd.io 
    .....: .json 
    .....: .json_normalize(l, 'nutritionNutrients', 
    .....:   ['vcNutritionId','vcUserId','vcPortionId','vcPortionName','vcPortionSize', 
    .....:   'ftEnergyKcal','vcPortionUnit','dtConsumedDate']) 
    .....:) 
Out[107]: 
    ftValue nPercentRI vcNutrient vcNutritionPortionId vcTrafficLight  ...  vcPortionSize \ 
0  0   0 alcohol 478d1905-f264-4d...      ...     20 
1  0   0  bcfa 478d1905-f264-4d...      ...     20 
2  0   0  biotin 478d1905-f264-4d...      ...     20 

     vcNutritionId vcPortionId ftEnergyKcal  vcPortionName 
0 2476378b-79ee-48...   1   5.2 1 average pepper 
1 2476378b-79ee-48...   1   5.2 1 average pepper 
2 2476378b-79ee-48...   1   5.2 1 average pepper 

[3 rows x 14 columns] 

जहां l अपनी सूची (पार्स JSON)

+1

@simongraham है, मैं खुश हूँ मैं मदद कर सका। :) कृपया [स्वीकार करने] पर विचार करें (http://meta.stackexchange.com/a/5235) सबसे उपयोगी उत्तर - इससे यह भी संकेत मिलेगा कि आपके प्रश्न का उत्तर दिया गया है। – MaxU

+0

मुझे नहीं लगता कि आप मुझे वर्तमान समस्या के अपने नवीनतम संपादन के साथ हाथ दे सकते हैं। धन्यवाद :) – simongraham

+0

@ सिमोंगहैम, मुझे लगता है कि आपको 'डेटा' के बजाय 'json_normalize' – MaxU

संबंधित मुद्दे