2016-08-03 13 views
0

Probleme mit dieser haben. Fühlen Sie sich, als ob ich ähnliche Transformationen von Daten durchgepeitscht hätte, aber diese wirft mich für eine Schleife.Tabellenkalkulation in verschachteltes Wörterbuch für D3 konvertieren

Wenn Sie ein Tabellenkalkulationsdaten in ein verschachteltes JSON konvertieren möchten, das für eine D3-Visualisierung verwendet wird, wird es als "flare.json" bezeichnet.

Das Ziel JSON wie folgt aussehen würde (wo offensichtlich ein Wörterbuch nur so gut sein würde):

{ 
    "name": "root", 
    "children": [ 
    { 
     "name": "A1", 
     "children": [ 
     { 
      "name": "A2", 
      "children": [ 
      { 
       "name": "A3", 
       "children": [ 
       { 
        "name": "A4", 
        "children": [ 
        ] 
       } 
       ] 
      } 
      ] 
     } 
     ] 
    }, 
    { 
     "name": "B1", 
     "children": [ 
     { 
      "name": "B2", 
      "children": [ 
      { 
       "name": "B3", 
       "children": [ 
       { 
        "name": "B4", 
        "children": [ 
        ] 
       } 
       ] 
      } 
      ] 
     } 
     ] 
    } 
    ] 
} 

Ich bin mit openpyxl aus einem Tabellenkalkulationsdaten ziehen, die ein Root-Tupel bereitstellt, enthält Tupel für jeden Spaltenwert.

z.B.

(
    ('A1','A2','A3','A4'), 
    ('B1','B2','B3','B4'), 
) 

Ich weiß, es gibt 101 verschiedene Möglichkeiten, dies zu tun, als Datenrahmen von pandas verwenden, und ich bin sicher, dass openpyxl eine Vielzahl von Methoden und Conversions für diese Art der Sache hat. Aber aus welchem ​​Grund auch immer, es ist schwierig, diesen Prozess heute zu sehen. Danke im Voraus.

+0

Mögliche Duplikate von [Pandas Dataframe in ein verschachteltes Dict konvertieren] (http://stackoverflow.com/questions/19798112/convert-pandas-dataframe-to-a-nested-dict) –

Antwort

1

Dies sollte es tun:

def convert_data(data):          
    out = {'name': 'root', 'children': []}   

    for row in data:         
     out['children'].append({})     
     current = out['children']      
     for value in row:        
      current[-1]['name'] = value    
      current[-1]['children'] = [{}]   

      current = current[-1]['children']   

    return out          

data = (('A1','A2','A3','A4'), ('B1','B2','B3','B4')) 

new_structure = convert_data(data) 

Sie können natürlich so etwas wie json.dumps ausgeben es als JSON-String verwenden.

+0

DANKE. Das ist großartig und funktioniert perfekt. Für meine eigene Gesundheit ist es schön zu wissen, dass ich in der Nähe war, aber eindeutig nicht ganz da. Sehr geschätzt. – ghukill

Verwandte Themen