2016-12-20 3 views
3

ich mit einer JSON-Antwort arbeite, die wie ein viele verschachtelte Wörterbuch unten formatiert ist:Python Flatten Multiply Nested Wörterbuch JSON mit Pandas

{u'addresses': [], 
u'application_ids': [20855193], 
u'applications': [{u'answers': [{u'answer': u'Indeed ', 
            u'question': u'How did you hear?'}], 
        u'applied_at': u'2015-10-29T22:19:04.925Z', 
        u'candidate_id': 9999999, 
        u'credited_to': None, 
        u'current_stage': {u'id': 9999999, 
             u'name': u'Application Review'}, 
        u'id': 9999999, 
        u'jobs': [{u'id': 9999999,u'name': u'ENGINEER'}], 
        u'last_activity_at': u'2015-10-29T22:19:04.767Z', 
        u'prospect': False, 
        u'rejected_at': None, 
        u'rejection_details': None, 
        u'rejection_reason': None, 
        u'source': {u'id': 7, u'public_name': u'Indeed'}, 
        u'status': u'active'}], 
u'attachments': [{u'filename': u'Jason_Bourne.pdf', 
        u'type': u'resume', 
        u'url': u'https://resumeURL'}], 
u'company': None, 
u'coordinator': {u'employee_id': None, 
        u'id': 9999999, 
        u'name': u'Batman_Robin'}, 
u'email_addresses': [{u'type': u'personal', 
         u'value': u'[email protected]'}], 
u'first_name': u'Jason', 
u'id': 9999999, 
u'last_activity': u'2015-10-29T22:19:04.767Z', 
u'last_name': u'Bourne', 
u'website_addresses': []} 

ich die JSON in eine Tabelle zu glätten bin versucht und haben das gefunden folgendes Beispiel auf der Pandas Dokumentation:.

http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.io.json.json_normalize.html

von dem, was ich verstehe, die „record_path“ Parameter den Pfad des untersten Ebene Eintrags geben Sie interessiert sind die „record_path“ Parameter können nur ein String oder li Strings. Aber um die 'Antworten' Datensätze in meinen Daten oben zu nennen, muss ich die Strings und Indizes wie folgt angeben;

answer = data['applications'][0]['answers']['answer'] 
question = data['applications'][0]['answers']['question'] 

Wie kann ich die obigen Aufzeichnungspfade als Parameter für die Funktion json_normalize eingeben?

Danke!

Antwort

3

Ich glaube, Sie können als record_pathlist verschachtelt:

from pandas.io.json import json_normalize  
df = json_normalize(d, ['applications', ['answers']]) 
print (df) 
    answer   question 
0 Indeed How did you hear? 
+0

, das funktioniert! Danke :) –

+0

Jetzt versuche ich dasselbe für den "Namen" unter "current_stage" zu tun. wenn ich tippe 'df = json_normalize (d, ['applications', ['current_stage', 'name']]' ' Ich bekomme jeden Buchstaben von" Application Review "in einer eigenen Zeile? –

+0

Sie können 'df = json_normalize (d ['applications'] [0] ['current_stage'])' verwenden, ich versuche viele Möglichkeiten und leider ohne Erfolg. Das Hauptproblem ist '[]' fehlen in '{u'id ': 9999999, u'name': u'Application Review '}' wie '[{u'id': 9999999, u'name ': u 'Application Review'}] ' – jezrael