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

  • Gewichteter gleitender Durchschnitt in Python
  • Pandas - füge neue Spalte zu Dataframe aus dem Wörterbuch hinzu
  • Python reguliert unregelmäßige Zeitreihen mit linearer Interpolation
  • Berechnen Sie den n. Tag von der ersten Veranstaltung in Pandas
  • Vectorized Haversine Formel mit einem Pandas Dataframe
  • Monat subtrahieren Monat
  • Finde nicht-numerische Zeilen in Dataframe in Pandas?
  • Aufteilung einer Liste in einem Pandas DataFrame
  • Wie man eine pandas dataframe Spalte in ein datetime Objekt macht, das gerade das Datum zeigt, um korrekt zu sortieren
  • Pandas: Halten nur erste Zeile von Daten in jedem 60 Sekunden bin
  • Gemischte Arten von Elementen in der Spalte von DataFrame
  • Python ist die beste Programmiersprache der Welt.