Ich habe ein Python-Wörterbuch wie das folgende:
{u'2012-06-08': 388,
u'2012-06-09': 388,
u'2012-06-10': 388,
u'2012-06-11': 389,
u'2012-06-12': 389,
u'2012-06-13': 389,
u'2012-06-14': 389,
u'2012-06-15': 389,
u'2012-06-16': 389,
u'2012-06-17': 389,
u'2012-06-18': 390,
u'2012-06-19': 390,
u'2012-06-20': 390,
u'2012-06-21': 390,
u'2012-06-22': 390,
u'2012-06-23': 390,
u'2012-06-24': 390,
u'2012-06-25': 391,
u'2012-06-26': 391,
u'2012-06-27': 391,
u'2012-06-28': 391,
u'2012-06-29': 391,
u'2012-06-30': 391,
u'2012-07-01': 391,
u'2012-07-02': 392,
u'2012-07-03': 392,
u'2012-07-04': 392,
u'2012-07-05': 392,
u'2012-07-06': 392}
Die Schlüssel sind Unicode- Daten und die Werte sind Ganzzahlen. Ich möchte dies in einen Pandas-Datenrahmen konvertieren, indem ich die Daten und ihre entsprechenden Werte als zwei separate Spalten habe. Beispiel: col1: Dates col2: DateValue (die Daten sind immer noch Unicode und die Datumswerte sind immer noch ganze Zahlen)
Date DateValue
0 2012-07-01 391
1 2012-07-02 392
2 2012-07-03 392
. 2012-07-04 392
. ... ...
. ... ...
Jede Hilfe in diese Richtung wäre sehr dankbar. Ich kann keine Ressourcen in den Pandas-Dokumenten finden, die mir dabei helfen.
Ich weiß, dass eine Lösung darin bestehen könnte, jedes Schlüssel-Wert-Paar in diesem Diktat in ein Diktat umzuwandeln, sodass die gesamte Struktur zu einem Diktat von Diktaten wird, und dann können wir jede Zeile einzeln zum Datenrahmen hinzufügen. Aber ich möchte wissen, ob es einen einfacheren und direkteren Weg gibt, dies zu tun.
Bisher habe ich versucht, das Diktat in ein Serienobjekt umzuwandeln, aber dies scheint die Beziehung zwischen den Spalten nicht aufrechtzuerhalten:
s = Series(my_dict,index=my_dict.keys())
Antworten:
Der Fehler hier besteht darin, dass der DataFrame-Konstruktor mit skalaren Werten aufgerufen wird (wobei erwartet wird, dass die Werte eine Liste / dict / ... sind, dh mehrere Spalten haben):
Sie können die Elemente aus dem Wörterbuch (dh die Schlüssel-Wert-Paare) entnehmen:
Aber ich denke, es ist sinnvoller, den Serienkonstruktor zu bestehen:
quelle
from_dict
haben ein orient kwarg, also könnte ich es verwenden, wenn ich das transponieren vermeiden wollte. Es gibt nur wenige Optionenfrom_dict
, unter der Haube unterscheidet es sich nicht wirklich von der Verwendung des DataFrame-Konstruktors.pandas.core.common.PandasError: DataFrame constructor not properly called!
aus dem ersten BeispielWenn Sie ein Wörterbuch in einen Pandas-Datenrahmen konvertieren, bei dem die Schlüssel die Spalten des Datenrahmens und die Werte die Zeilenwerte sein sollen, können Sie das Wörterbuch einfach wie folgt in Klammern setzen:
Es hat mir einige Kopfschmerzen erspart und ich hoffe, es hilft jemandem da draußen!
BEARBEITEN: In den Pandas-Dokumenten ist eine Option für den
data
Parameter im DataFrame-Konstruktor eine Liste von Wörterbüchern. Hier übergeben wir eine Liste mit einem Wörterbuch.quelle
Wie in einer anderen Antwort erläutert, funktioniert die
pandas.DataFrame()
direkte Verwendung hier nicht so, wie Sie denken.Was Sie tun können, ist zu verwenden
pandas.DataFrame.from_dict
mitorient='index'
:quelle
rename
Methode verketten, um auch die Namen des Index und der Spalten auf einmal festzulegen?Übergeben Sie die Elemente des Wörterbuchs an den DataFrame-Konstruktor und geben Sie die Spaltennamen an. Danach analysieren Sie die
Date
Spalte, umTimestamp
Werte zu erhalten .Beachten Sie den Unterschied zwischen Python 2.x und 3.x:
In Python 2.x:
In Python 3.x: (erfordert eine zusätzliche 'Liste')
quelle
PandasError: DataFrame constructor not properly called!
df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
ps insbesondere habe ich zeilenorientierte Beispiele hilfreich gefunden; da oft so, wie Datensätze extern gespeichert werden.
https://pbpython.com/pandas-list-dict.html
quelle
Pandas haben eine eingebaute Funktion zur Konvertierung von Diktat in Datenrahmen.
Für Ihre Daten können Sie diese wie folgt konvertieren:
quelle
quelle
Sie können die Schlüssel und Werte des Wörterbuchs auch einfach wie folgt an den neuen Datenrahmen übergeben:
quelle
In meinem Fall wollte ich, dass Schlüssel und Werte eines Diktats Spalten und Werte von DataFrame sind. Das einzige, was für mich funktioniert hat, war:
quelle
Dies hat bei mir funktioniert, da ich eine separate Indexspalte haben wollte
quelle
Akzeptiert ein Diktat als Argument und gibt einen Datenrahmen mit den Schlüsseln des Diktats als Index und den Werten als Spalte zurück.
quelle
So hat es bei mir funktioniert:
ich hoffe das hilft
quelle
Wenn Sie nicht einkapseln
yourDict.keys()
innerhalb vonlist()
, dann werden Sie mit allen Ihren Schlüssel am Ende und Werte in jeder Zeile jeder Spalte platziert. So was:Date \ 0 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
1 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
2 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
3 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
4 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
Aber durch Hinzufügen
list()
sieht das Ergebnis folgendermaßen aus:Date Date_Values 0 2012-06-08 388 1 2012-06-09 388 2 2012-06-10 388 3 2012-06-11 389 4 2012-06-12 389 ...
quelle
Ich bin mehrmals darauf gestoßen und habe ein Beispielwörterbuch, das ich aus einer Funktion erstellt habe
get_max_Path()
, und es gibt das Beispielwörterbuch zurück:{2: 0.3097502930247044, 3: 0.4413177909384636, 4: 0.5197224051562838, 5: 0.5717654946470984, 6: 0.6063959031223476, 7: 0.6365209824708223, 8: 0.655918861281035, 9: 0.680844386645206}
Um dies in einen Datenrahmen zu konvertieren, habe ich Folgendes ausgeführt:
df = pd.DataFrame.from_dict(get_max_path(2), orient = 'index').reset_index()
Gibt einen einfachen zweispaltigen Datenrahmen mit einem separaten Index zurück:
index 0 0 2 0.309750 1 3 0.441318
Benennen Sie die Spalten einfach mit um
f.rename(columns={'index': 'Column1', 0: 'Column2'}, inplace=True)
quelle
Ich denke, dass Sie beim Erstellen eines Wörterbuchs einige Änderungen an Ihrem Datenformat vornehmen und es dann einfach in DataFrame konvertieren können:
Eingang:
Ausgabe:
Eingang:
Ausgabe: wird Ihr DataFrame sein
Sie müssen nur Text in Sublime oder vielleicht Excel bearbeiten.
quelle