Konvertieren von Wörterbuch zu Dataframe mit Tupel als Schlüssel

Ich habe so ein Wörterbuch

df_dict = {(7, 'hello'): {1}, (1, 'fox'): {2}} 

Ich möchte es in ein Dataframe verwandeln, wo der erste Teil des Tupels der Zeilenkopf ist und der zweite Teil des Tupels der Spaltenkopf ist. Ich habe das versucht:

 doc_df = pd.DataFrame(df_dict, index=[df_dict.keys()[0]], columns = [df_dict.keys()[1]]) 

Aber ich habe den Fehler TypeError: 'dict_keys' object does not support indexing

Ich möchte, dass mein Dataframe aussieht:

 _ | fox | hello 1 | 2 | null 7 | null | 1 

Wie gehe ich in die Schlüssel ein?

One Solution collect form web for “Konvertieren von Wörterbuch zu Dataframe mit Tupel als Schlüssel”

Der Grund, warum du den TypeError ist, dass df_dict.keys() ein Iterator ist, der Schlüssel aus dem dict eins nach dem anderen liefert. Die Elemente, die es ergibt, werden (7, 'hello') und (1, 'fox') , aber das kennt das nicht im voraus. Der Iterator selbst hat keine Ahnung, wie viele Elemente es hat oder welche Art von Struktur diese Elemente haben könnten, und insbesondere hat es keine Möglichkeit, auf ein Element durch Indexnummer zuzugreifen.

Jetzt können Sie die Funktion itertools.islice verwenden, um auf ein bestimmtes Element von einem itertools.islice zuzugreifen, aber es geht darum, alles wegzuwerfen, was vorher kommt. Also das ist nicht das, was du willst.

Die Antwort auf die Frage, die Sie fragen , was ist, wie Sie in die Schlüssel indexieren, ist, sie in eine Liste zuerst zu konvertieren:

 l = list(df_dict.keys()) 

Und dann kannst du l[0] und l[1] und so weiter verwenden.

Aber auch das ist nicht das, was du eigentlich für deine Bewerbung benötigst. Die resultierende Liste in deinem Beispiel wäre

 [(7, 'hello'), (1, 'fox')] 

Also l[0] wird (7, 'hello') und l[1] wird (1, 'fox') (oder umgekehrt, da du nicht weißt, welche Reihenfolge die Schlüssel herauskommen werden). Was Sie eigentlich zugreifen wollen, ist (7, 1) und ('hello', 'fox') , für die man entweder etwas wie ein Listenverständnis verwenden muss:

 [x[0] for x in l] # (7, 1) [x[1] for x in l] # ('hello', 'fox') 

Oder du könntest es in ein NumPy-Array umwandeln und das umsetzen.

 npl = numpy.array(l) # array([[7, 'hello'], [1, 'fox']]) nplT = npl.T # array([[7, 1], ['hello', 'fox']]) 

Jetzt können Sie nplT[0] und so weiter verwenden.

  • Python Pandas zählen und summieren spezifische Bedingungen
  • Pandas DataFrame Matrix basierte Berechnung
  • Sortiere eine zweidimensionale Liste python
  • Kategoriale Daten in Subplots
  • Pandas: concat data frame mit unterschiedlichem Spaltennamen
  • Löschen Sie Spalte in Pandas, wenn es alle Zeros ist
  • Überlauffehler mit Pandas read_stata
  • Schreiben in mehrere benachbarte Spalten in Pandas effizient
  • Resampling mit 'how = count' verursacht Probleme
  • Wie filme ich in NaN (Pandas)?
  • Pandas Dataframe überprüfen Sie die Kreuzung und füllen Sie ein neues Dataframe aus
  • Python ist die beste Programmiersprache der Welt.