Konvertieren Liste der Wörterbücher, die auf ein pandas DataFrame
Habe ich eine Liste der Wörterbücher wie diese:
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
Und ich möchten diesen in einen Pandabären DataFrame
wie diese:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
Hinweis: die Reihenfolge der Spalten spielt keine Rolle.
Wie kann ich die Liste der Wörterbücher in ein pandas DataFrame, wie oben gezeigt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angenommen, dass
d
ist die Liste von dicts einfach:df = df.set_index('time')
danachpandas.DataFrame
In pandas 16.2, ich hatte zu tun
pd.DataFrame.from_records(d)
zu bekommen dies funktioniert.deque
0.17.1
mit @joris Lösung0.18.1
, muss manfrom_records
wenn die Wörterbücher nicht alle haben die gleichen Schlüssel.Die anderen Antworten sind richtig, aber nicht viel erklärt wurde in Bezug auf die Vorteile und Grenzen dieser Methoden. Das Ziel dieses Beitrags möchten wir Ihnen zeigen, Beispiele für diese Methoden unter verschiedenen Situationen, zu diskutieren, Wann (und Wann nicht) und alternativen vorschlagen.
DataFrame()
,DataFrame.from_records()
, und.from_dict()
Je nach Struktur und format der Daten, es gibt Situationen, in denen entweder alle drei Methoden arbeiten, oder einige besser funktionieren als andere, oder einige überhaupt nicht arbeiten.
Denke, ein sehr erfundenes Beispiel.
Diese Liste besteht aus "Aufzeichnungen" mit jedem Schlüssel vorhanden. Dies ist der einfachste Fall begegnen können.
Wort auf dem Wörterbuch Orientierungen:
orient='index'
/'columns'
Bevor Sie fortfahren, ist es wichtig, die Unterscheidung zwischen den verschiedenen Arten von Wörterbuch Orientierungen und Unterstützung der pandas. Es gibt zwei primäre Typen: "Spalten", und "index".
orient='columns'
Wörterbücher mit den "Spalten" - Ausrichtung haben Sie Ihre Schlüssel entsprechen den Spalten in der entsprechenden DataFrame.
Beispielsweise
data
oben in der "Säulen" orientieren.Hinweis: Wenn Sie mit
pd.DataFrame.from_records
die Orientierung wird davon ausgegangen, dass "Spalten" (Sie können nicht anders angegeben), und die Wörterbücher werden entsprechend geladen.orient='index'
Mit diesem orient-keys ausgegangen sind, zu entsprechen index-Werte. Diese Art von Daten ist am besten geeignet für
pd.DataFrame.from_dict
.Diesem Fall nicht berücksichtigt, bei der OP, aber immer noch nützlich zu wissen.
Festlegen Von Benutzerdefinierten Index
Wenn Sie einen benutzerdefinierten index für die daraus resultierenden DataFrame, können Sie es mithilfe der
index=...
argument.Dies nicht unterstützt
pd.DataFrame.from_dict
.Umgang mit Fehlenden Keys/Spalten
Alle Methoden funktionieren out-of-the-box beim Umgang mit Wörterbüchern fehlende Schlüssel/Werte in der Spalte. Zum Beispiel,
Lesen Teilmenge der Spalten
"Was wenn ich nicht will, zu Lesen in jede einzelne Spalte"? Sie können leicht geben Sie diese mithilfe der
columns=...
parameter.Zum Beispiel aus dem Beispiel-Wörterbuch
data2
oben, wenn Sie wollte, Lesen Sie nur die Spalten "A", " D " und " F " können Sie dies tun, indem eine Liste:Dies nicht unterstützt
pd.DataFrame.from_dict
mit der Standard-orient "Spalten".Lesen Teilmenge von Zeilen
Nicht unterstützt von jeder dieser Methoden direkt. Haben Sie zu Durchlaufen, Ihre Daten und führen Sie eine reverse löschen in-place, wie Sie Durchlaufen. Zum Beispiel, zu extrahieren nur die 0th und 2nd Zeilen aus
data2
vor, die Sie verwenden können:Das Allheilmittel:
json_normalize
für Verschachtelte DatenEinem starken, robusten alternative zu den oben beschriebenen Methoden ist die
json_normalize
Funktion, die arbeitet mit Listen von Wörterbüchern (Datensätze), und zusätzlich kann auch mit verschachtelten dictionaries.Wieder, Bedenken Sie, dass die Daten an
json_normalize
muss in der Liste der Wörterbücher (records format).Wie bereits erwähnt, ist
json_normalize
kann auch mit verschachtelten dictionaries. Hier ist ein Beispiel aus der Dokumentation.Weitere Informationen auf der
meta
undrecord_path
Argumente, schauen Sie sich die Dokumentation.Zusammenfassung
Hier ist eine Tabelle mit den oben diskutierten Methoden, zusammen mit den unterstützten features/Funktionalität.
* Verwenden Sie
orient='columns'
und dann transponieren, um den gleichen Effekt wieorient='index'
.Können Sie auch
pd.DataFrame.from_dict(d)
als :dict
s, nicht von einem einzigendict
als Sie angenommen in Ihrer Antwort.Ich kenne ein paar Leute kommen über dieses und finden hier nichts hilft. Der einfachste Weg, die ich gefunden habe, es zu tun ist wie folgt:
Hoffe, das jemand hilft!