Wie konvertiert man verschachteltes Wörterbuch in eine 2D-Tabelle

Diese Frage hat hier schon eine Antwort:

  • Wie man diese verschachtelte JSON in säulenförmige Form in Pandas dataframe 1 Antwort umwandelt

Wie man das verschachtelte Wörterbuch in eine 2D-Tabelle umwandelt

Data [0] ist eine Sammlung von Tabellenzeilen

Data [0] [0] ist eine Tabellenzeile,

Schlüssel: Jahr ist der Spaltenname,

Schlüssel: Werte sind die Werte in der Spalte.

Ich möchte die Daten [0] in tablular Form in Pandas dataframe wiederherstellen.

Ich fand die json_normalize kann helfen, aber nicht wissen, wie es zu tun.

irgendwelche Vorschläge ?

Erwartetes Format

Rohdaten im Wörterbuch

(Pdb++) data[0] [{u'values': [{u'Actual': u'(0.2)'}, {u'Upper End of Range': u'-'}, {u'Upper End of Central Tendency': u'-'}, {u'Lower End of Central Tendency': u'-'}, {u'Lower End of Range': u'-'}], u'year': u'2009'}, {u'values': [{u'Actual': u'2.8'}, {u'Upper End of Range': u'-'}, {u'Upper End of Central Tendency': u'-'}, {u'Lower End of Central Tendency': u'-'}, {u'Lower End of Range': u'-'}], u'year': u'2010'}, {u'values': [{u'Actual': u'2.0'}, {u'Upper End of Range': u'-'}, {u'Upper End of Central Tendency': u'-'}, {u'Lower End of Central Tendency': u'-'}, {u'Lower End of Range': u'-'}], u'year': u'2011'}, {u'values': [{u'Actual': u'2.0'}, {u'Upper End of Range': u'-'}, {u'Upper End of Central Tendency': u'-'}, {u'Lower End of Central Tendency': u'-'}, {u'Lower End of Range': u'-'}], u'year': u'2012'}, {u'values': [{u'Actual': u'2.5'}, {u'Upper End of Range': u'-'}, {u'Upper End of Central Tendency': u'-'}, {u'Lower End of Central Tendency': u'-'}, {u'Lower End of Range': u'-'}], u'year': u'2013'}, {u'values': [{u'Actual': u'-'}, {u'Upper End of Range': u'3.0'}, {u'Upper End of Central Tendency': u'3.0'}, {u'Lower End of Central Tendency': u'2.8'}, {u'Lower End of Range': u'2.1'}], u'year': u'2014'}, {u'values': [{u'Actual': u'-'}, {u'Upper End of Range': u'3.5'}, {u'Upper End of Central Tendency': u'3.2'}, {u'Lower End of Central Tendency': u'3.0'}, {u'Lower End of Range': u'2.2'}], u'year': u'2015'}, {u'values': [{u'Actual': u'-'}, {u'Upper End of Range': u'3.4'}, {u'Upper End of Central Tendency': u'3.0'}, {u'Lower End of Central Tendency': u'2.5'}, {u'Lower End of Range': u'2.2'}], u'year': u'2016'}, {u'values': [{u'Actual': u'-'}, {u'Upper End of Range': u'2.4'}, {u'Upper End of Central Tendency': u'2.3'}, {u'Lower End of Central Tendency': u'2.2'}, {u'Lower End of Range': u'1.8'}], u'year': u'Longer Run'}] (Pdb++) data[0][0] {u'values': [{u'Actual': u'(0.2)'}, {u'Upper End of Range': u'-'}, {u'Upper End of Central Tendency': u'-'}, {u'Lower End of Central Tendency': u'-'}, {u'Lower End of Range': u'-'}], u'year': u'2009'} 

Vielleicht, um das JSON-Schema zu ändern, wird eine bessere Lösung sein?

Wenn ja, welche Art von NEW JSON Schema Design ist besser für die Art der Tabelle Daten. Vielen Dank

2 Solutions collect form web for “Wie konvertiert man verschachteltes Wörterbuch in eine 2D-Tabelle”

 import pandas # set up data structures columns = [ "year", "actual", "upper", "upper_central", "lower_central", "lower" ] value_getter = { "year" : lambda item: item['year'], "actual" : lambda item: item['values'][0]['Actual'], "upper" : lambda item: item['values'][1]['Upper End of Range'], "upper_central": lambda item: item['values'][2]['Upper End of Central Tendency'], "lower_central": lambda item: item['values'][3]['Lower End of Central Tendency'], "lower" : lambda item: item['values'][4]['Lower End of Range'] } mydata = { "year" : [], "actual" : [], "upper" : [], "upper_central": [], "lower_central": [], "lower" : [] } # repackage data for item in data[0]: for column in columns: mydata[column].append(value_getter[column](item)) # and stuff it into pandas df = pandas.DataFrame(mydata, columns=columns) 

Dann gibt es df.T

  0 1 2 3 4 5 6 7 8 year 2009 2010 2011 2012 2013 2014 2015 2016 Longer Run actual (0.2) 2.8 2.0 2.0 2.5 - - - - upper - - - - - 3.0 3.5 3.4 2.4 upper_central - - - - - 3.0 3.2 3.0 2.3 lower_central - - - - - 2.8 3.0 2.5 2.2 lower - - - - - 2.1 2.2 2.2 1.8 

Für die Effizienz sollten Sie den Datenrahmen initialisieren, aber wenn Ihr Datensatz klein ist und wenn Sie nicht alle möglichen Zeichenfolgen kennen, die in den innersten Wörterbüchern auftreten, gibt es keine Notwendigkeit, dies zu tun.

  import pandas as pd df=pd.DataFrame for dict1 in data[0]: for dict2 in dict1['values']: for key,val in zip(dict2.keys(),dict2.values()): df.loc[key,dict1['year']]=val df 

Bildbeschreibung hier eingeben

  • Pandas (Python) Lesen und Arbeiten an Java BigInteger / große Zahlen
  • Stapeln und Entstapeln
  • Python, wie man eine pandas-serie in ein pandas DataFrame umwandelt?
  • Python: DataFrame-Index sortieren, der einen String und eine Zahl hat
  • Gibt es eine effizientere Möglichkeit, Periodizität eines intraday OHLC DataFrame in Python umzuwandeln
  • Pandas to_html () trennt Zeichenfolgeninhalt
  • Python: Anwenden einer Funktion auf DataFrame, die Eingabe aus der neuen berechneten Spalte übernimmt
  • Erster Nicht-Nullwert pro Zeile aus einer Liste von Pandas-Spalten
  • Spalte pandas (String / Objekt) als VARCHAR in Oracle DB anstelle von CLOB speichern (Standardverhalten)
  • Umwandlung von gmt in lokale Zeitzone in Pandas
  • Beschriftete Datentypen Python
  • Python ist die beste Programmiersprache der Welt.