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?

837voto

Andy Hayden Punkte 324102

Der Fehler hier ist, da der DataFrame-Konstruktor mit skalaren Werten aufgerufen wird (wo es erwartet wird, dass Werte eine Liste/Dictionary/... sind, also mehrere Spalten haben):

pd.DataFrame(d)
ValueError: Wenn alle Skalarwerte verwendet werden, müssen Sie einen Index übergeben

Sie könnten die Elemente aus dem Dictionary nehmen (also die Schlüssel-Wert-Paare):

In [11]: pd.DataFrame(d.items())  # oder list(d.items()) in Python 3
Out[11]:
             0    1
0   2012-07-02  392
1   2012-07-06  392
2   2012-06-29  391
3   2012-06-28  391
...

In [12]: pd.DataFrame(d.items(), columns=['Datum', 'Datumswert'])
Out[12]:
          Datum  Datumswert
0   2012-07-02        392
1   2012-07-06        392
2   2012-06-29        391

Aber ich denke, es macht mehr Sinn, den Series-Konstruktor zu übergeben:

In [21]: s = pd.Series(d, name='Datumswert')
Out[21]:
2012-06-08    388
2012-06-09    388
2012-06-10    388

In [22]: s.index.name = 'Datum'

In [23]: s.reset_index()
Out[23]:
          Datum  Datumswert
0   2012-06-08        388
1   2012-06-09        388
2   2012-06-10        388

368voto

cheevahagadog Punkte 4138

Beim Umwandeln eines Wörterbuchs in ein Pandas-DataFrame, bei dem Sie möchten, dass die Schlüssel die Spalten des DataFrames sind und die Werte die Zeilenwerte sind, können Sie einfach Klammern um das Wörterbuch setzen, wie hier:

>>> dict_ = {'Schlüssel 1': 'Wert 1', 'Schlüssel 2': 'Wert 2', 'Schlüssel 3': 'Wert 3'}
>>> pd.DataFrame([dict_])

    Schlüssel 1   Schlüssel 2   Schlüssel 3
0   Wert 1       Wert 2       Wert 3

EDIT: In den Pandas-Dokumenten ist eine Option für den Daten-Parameter im DataFrame-Konstruktor eine Liste von Wörterbüchern. Hier übergeben wir eine Liste mit einem Wörterbuch darin.

176voto

ntg Punkte 10508

Wie in einer anderen Antwort erklärt, wird die Verwendung von pandas.DataFrame() hier direkt nicht so funktionieren, wie du denkst.

Was du tun kannst, ist pandas.DataFrame.from_dict mit orient='index' zu verwenden:

In[7]: pandas.DataFrame.from_dict({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-07-05': 392,
 u'2012-07-06': 392}, orient='index', columns=['foo'])
Out[7]: 
            foo
2012-06-08  388
2012-06-09  388
2012-06-10  388
2012-06-11  389
2012-06-12  389
........
2012-07-05  392
2012-07-06  392

85voto

Viktor Kerkez Punkte 45110

Übergeben Sie die Elemente des Wörterbuchs an den DataFrame-Konstruktor und geben Sie die Spaltennamen an. Danach die Date-Spalte parsen, um Timestamp-Werte zu erhalten.

Beachten Sie den Unterschied zwischen Python 2.x und 3.x:

In Python 2.x:

df = pd.DataFrame(data.items(), columns=['Date', 'DateValue'])
df['Date'] = pd.to_datetime(df['Date'])

In Python 3.x: (erfordert eine zusätzliche 'list')

df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
df['Date'] = pd.to_datetime(df['Date'])

66voto

Neil Punkte 5834

df from lists and dictionaries

p.s. insbesondere habe ich rowbasierte Beispiele hilfreich gefunden; da dies oft ist, wie Datensätze extern gespeichert sind.

https://pbpython.com/pandas-list-dict.html

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