Ich habe eine Liste solcher Wörterbücher:
[{'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öchte daraus Pandas machen DataFrame
:
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 wie oben gezeigt in einen Pandas DataFrame verwandeln?
python
dictionary
pandas
dataframe
AppleLover
quelle
quelle
df = df.set_index('time')
danach tunpandas.DataFrame
'{"":{"...
Beachten Sie, dass Sie für ein verschachteltes Wörterbuch den Ansatz json_normalize verwenden, siehe die ausführliche Antwort von @ cs95Die anderen Antworten sind richtig, aber es wurde nicht viel über die Vor- und Nachteile dieser Methoden erklärt. Das Ziel dieses Beitrags ist es, Beispiele für diese Methoden in verschiedenen Situationen zu zeigen, zu diskutieren, wann sie verwendet werden sollen (und wann nicht) und Alternativen vorzuschlagen.
DataFrame()
,DataFrame.from_records()
Und.from_dict()
Abhängig von der Struktur und dem Format Ihrer Daten gibt es Situationen, in denen entweder alle drei Methoden funktionieren oder einige besser funktionieren als andere oder einige überhaupt nicht funktionieren.
Betrachten Sie ein sehr ausgeklügeltes Beispiel.
Diese Liste besteht aus "Datensätzen" mit allen vorhandenen Schlüsseln. Dies ist der einfachste Fall, dem Sie begegnen könnten.
Wort zur Wörterbuchorientierung:
orient='index'
/'columns'
Bevor Sie fortfahren, ist es wichtig, zwischen den verschiedenen Arten von Wörterbuchorientierungen und der Unterstützung durch Pandas zu unterscheiden. Es gibt zwei Haupttypen: "Spalten" und "Index".
orient='columns'
Bei Wörterbüchern mit der Ausrichtung "Spalten" entsprechen die Schlüssel den Spalten im entsprechenden DataFrame.
Zum Beispiel ist
data
oben in der "Spalten" Orientierung.Hinweis: Wenn Sie verwenden
pd.DataFrame.from_records
, wird angenommen, dass die Ausrichtung "Spalten" ist (Sie können nichts anderes angeben), und die Wörterbücher werden entsprechend geladen.orient='index'
Bei dieser Ausrichtung wird angenommen, dass Schlüssel Indexwerten entsprechen. Diese Art von Daten ist am besten geeignet für
pd.DataFrame.from_dict
.Dieser Fall wird im OP nicht berücksichtigt, ist aber dennoch nützlich zu wissen.
Benutzerdefinierten Index festlegen
Wenn Sie einen benutzerdefinierten Index für den resultierenden DataFrame benötigen, können Sie ihn mithilfe des
index=...
Arguments festlegen .Dies wird von nicht unterstützt
pd.DataFrame.from_dict
.Umgang mit fehlenden Schlüsseln / Spalten
Alle Methoden funktionieren sofort, wenn Wörterbücher mit fehlenden Schlüssel- / Spaltenwerten verarbeitet werden. Zum Beispiel,
Teilmenge der Spalten lesen
"Was ist, wenn ich nicht in jeder einzelnen Spalte lesen möchte?" Sie können dies einfach mit dem
columns=...
Parameter angeben .Wenn Sie beispielsweise aus dem
data2
obigen Beispielwörterbuch nur die Spalten "A", "D" und "F" lesen möchten, können Sie dies tun, indem Sie eine Liste übergeben:Dies wird von
pd.DataFrame.from_dict
den Standardausrichtungsspalten nicht unterstützt .Teilmenge der Zeilen lesen
Wird von keiner dieser Methoden direkt unterstützt . Sie müssen Ihre Daten durchlaufen und beim Iterieren an Ort und Stelle einen umgekehrten Löschvorgang durchführen . Zum Beispiel extrahieren nur die 0 - ten und 2 nd Reihen von
data2
oben, können Sie:Das Allheilmittel:
json_normalize
für verschachtelte DatenEine starke, robuste Alternative zu den oben beschriebenen Methoden ist die
json_normalize
Funktion, die mit Listen von Wörterbüchern (Datensätzen) arbeitet und darüber hinaus auch verschachtelte Wörterbücher verarbeiten kann.Beachten Sie auch hier, dass die an übergebenen Daten
json_normalize
im Format der Liste der Wörterbücher (Datensätze) vorliegen müssen.Wie bereits erwähnt,
json_normalize
können auch verschachtelte Wörterbücher verarbeitet werden. Hier ist ein Beispiel aus der Dokumentation.Weitere Informationen zu
meta
undrecord_path
Argumenten finden Sie in der Dokumentation.Zusammenfassen
Hier finden Sie eine Tabelle aller oben beschriebenen Methoden sowie die unterstützten Features / Funktionen.
* Verwenden Sie
orient='columns'
und transponieren Sie, um den gleichen Effekt wie zu erzielenorient='index'
.quelle
In Pandas 16.2 musste ich tun
pd.DataFrame.from_records(d)
, um dies zum Laufen zu bringen.quelle
deque
0.17.1
mit @ joris Lösung0.18.1
muss verwendet werden,from_records
wenn die Wörterbücher nicht alle die gleichen Schlüssel haben.Sie können auch verwenden
pd.DataFrame.from_dict(d)
als:quelle
dict
s zu erstellen , nicht aus einem einzelnen,dict
wie Sie in Ihrer Antwort angenommen haben.Ich weiß, dass ein paar Leute darauf stoßen werden und nichts hier hilft. Der einfachste Weg, den ich gefunden habe, ist folgender:
Hoffe das hilft jemandem!
quelle
und einfacher Anruf:
quelle
quelle
Zum Konvertieren einer Liste von Wörterbüchern in einen Pandas-DataFrame können Sie "Anhängen" verwenden:
Wir haben ein Wörterbuch genannt
dic
und dic hat 30 Listenelemente (list1
,list2
...,list30
)total_df
)total_df
mitlist1
total_df
quelle
DataFrame()
,DataFrame.from_records()
und.from_dict()
?