574 Stimmen

Konvertiere Python dict in ein DataFrame

Ich habe ein Python-Dictionary:

{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}

Ich möchte dies in ein Pandas-Dataframe umwandeln, indem ich die Daten und ihre entsprechenden Werte als zwei separate Spalten habe; das erwartete Ergebnis sieht wie folgt aus:

     Date         DateValue
0    2012-07-01    391
1    2012-07-02    392
2    2012-07-03    392
.    2012-07-04    392
.    ...           ...

Gibt es einen direkten Weg, dies zu tun?

1voto

NL23codes Punkte 962
d = {'Datum': list(yourDict.keys()),'Werte': list(yourDict.values())}
df = pandas.DataFrame(data=d)

Wenn Sie yourDict.keys() nicht innerhalb von list() einschließen, landen alle Ihre Schlüssel und Werte in jeder Zeile jeder Spalte. So:

Datum \ 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 von list() sieht das Ergebnis so aus:

Datum Werte 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 ...

1voto

Mainland Punkte 3417

%timeit Ergebnis für ein gemeinsames Wörterbuch und pd.DataFrame.from_dict() ist der klare Gewinner.

%timeit cols_df = pd.DataFrame.from_dict(clu_meta,orient='index',columns=['Columns_fromUser'])
214 µs ± 9.38 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)

%timeit pd.DataFrame([clu_meta])
943 µs ± 10.6 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)

%timeit pd.DataFrame(clu_meta.items(), columns=['Default_colNames', 'Columns_fromUser'])
285 µs ± 7.91 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)

0voto

Bryan Butler Punkte 1630

Ich bin mehrmals auf dieses Problem gestoßen und habe ein Beispielwörterbuch erstellt, das ich aus einer Funktion get_max_Path() erstellt habe. Diese Funktion gibt das folgende Wö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 umzuwandeln, habe ich Folgendes ausgeführt:

df = pd.DataFrame.from_dict(get_max_path(2), orient = 'index').reset_index()

Liefert einen einfachen Datenrahmen mit zwei Spalten und einem separaten Index zurück:

index 0 0 2 0.309750 1 3 0.441318

Nur die Spalten umbenennen mit f.rename(columns={'index': 'Column1', 0: 'Column2'}, inplace=True)

0voto

not a robot Punkte 3525

Wenn die Schlüssel als separate Spalte gedacht sind, dann erledigt die Konstruktion einer Serie und später das Zurücksetzen des Index und das Umbenennen der Spalten den Job.

d = {'2012-06-08': 388, '2012-06-09': 388, '2012-06-10': 388, '2012-06-11': 389}

df = pd.Series(d).rename_axis('Datum').reset_index(name='Wert')
df = pd.Series(d).reset_index().set_axis(['Datum', 'Wert'], axis=1)

         Datum  Wert
0  2012-06-08   388
1  2012-06-09   388
2  2012-06-10   388
3  2012-06-11   389

Wenn die Schlüssel als Index gedacht sind, dann erledigt die Konstruktion einer Serie und später die Erweiterung zu einem DataFrame den Job.

df = pd.Series(d).to_frame('Wert')

            Wert
2012-06-08   388
2012-06-09   388
2012-06-10   388
2012-06-11   389

Wenn das Dictionary tief verschachtelt ist (ähnlich einem JSON-Objekt), dann kannst du auch json_normalize() verwenden, um es zu flattening.

d = {'id': 0, 'Data': [{'x': {'a': 10, 'b': 2}}, {'x': {'a': 20, 'b': 1}}]}
df = pd.json_normalize(d, 'Data', 'id')

   x.a  x.b id
0   10    2  0
1   20    1  0

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X