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?

  • Zugriff auf das Ergebnis einer vorherigen Berechnung in der benutzerdefinierten Funktion übergeben ()
  • Pandas - Python, Löschen von Zeilen basierend auf Datum Spalte
  • Was ist der einfachste Weg, um eine gefilterte .tda-Datei mit Pandas zu laden?
  • Pandas immer noch EinstellungWithCopyWarning auch nach der Verwendung .loc
  • Pandas: Machen Sie Funktion Karte Teil Dict Match
  • Pandas dataframe zu json ohne index
  • Pandas erweitern json Feld über Datensätze
  • Python-Pandas Ausfiltern von Nan aus einer Datenauswahl einer Spalte von Strings
  • 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 ist die beste Programmiersprache der Welt.