Erweitern Sie ein in Python verschachteltes Wörterbuch, um etwas wie Pandas MultiIndex zu tun

Was du machen willst

――Ich möchte ein verschachteltes Wörterbuch erweitern, indem ich es mit einem Unterstrich verbinde. --Eingabe: d1 = {'A': {'i': 0, 'j': 1}, 'B': {'i': 2, 'j': 3}} Daten, die als Wörterbuch verwendet werden können

Funktion (nicht intelligent)

―― Am Ende hat das verschachtelte Wörterbuch eine Baumstruktur. ――Als Bild ist der Prozess wie das Brechen einer Baumstruktur und das direkte Verbinden der Wurzeln und Enden.

Also habe ich den folgenden Code geschrieben.


#Schlüsselwechsel
def changekey(dict,k1,k2):
    dict[k2] = dict[k1]
    del dict[k1]

#Fügen Sie allen Tasten mit Unterstrichen Modifikatoren hinzu
def addkeyheader(dict,key):
    ks = list(dict.keys())
    for k in ks:
        changekey(dict,k,key+'_'+k)

#Lieblingsfunktion Kombinieren Sie nach der Suche nach Tiefenpriorität die Elementnamen und kehren Sie zurück
def dict_flatten(dict_,depth=2):
    newdict = {}
    for key in list(dict_.keys()):
        #Wenn das Element auch diktiert ist, rufen Sie es rekursiv auf
        if isinstance(dict_[key], dict):
            if depth > 0:
                dic = dict_flatten(dict_[key],depth-1)
                addkeyheader(dic,key)
                newdict.update(dic)
            else:
                newdict[key] = dict_[key]
        #Wenn das Element nicht diktiert ist, lassen Sie es wie es ist
        else:
            newdict[key] = dict_[key]
    return newdict

Intelligentere Implementierung

In den Kommentaren habe ich Ihnen von einer intelligenteren Implementierung erzählt.

def _unwrap(dct, prefix):
    for key, value in dct.items():
        new_key = f'{prefix}_{key}'
        if isinstance(value, dict):
            yield from _unwrap(value, new_key)
        else:
            yield new_key[1:], value       

def unwrap(dct):
    return dict(_unwrap(dct, ''))

d2 = unwrap(d1)

Erwartete Nutzung

Wenn der Eingang konvertiert wird, sieht er wie folgt aus.

>> pd.DataFrame.from_dict(d1)
   A  B
i  0  2
j  1  3

Die Ausgabe wird wie folgt konvertiert.

>> pd.DataFrame(d2,index=[""])
  A_i  A_j  B_i  B_j
    0    1    2    3

Ich fand es eine gute Idee, aber ich verstand Pandas nicht sehr gut.

Pandas können mit MultiIndex auf natürliche Weise zerlegt werden

Praktisch kann es mit der MultiIndex-Funktion bearbeitet werden, ohne es zerlegen zu müssen. https://qiita.com/Morinikiz/items/40faa91e7a83807c0552

>>> df = pd.DataFrame(d1)
>>> df
   A  B
i  0  2
j  1  3
>>> df.unstack()
A  i    0
   j    1
B  i    2
   j    3
dtype: int64
>>> df.stack()
i  A    0
   B    2
j  A    1
   B    3
dtype: int64

Verwenden Sie am Ende to_frame (), um zum Datenrahmen zurückzukehren.

>>> df.unstack().to_frame("name")
     name
A i     0
  j     1
B i     2
  j     3

Recommended Posts

Erweitern Sie ein in Python verschachteltes Wörterbuch, um etwas wie Pandas MultiIndex zu tun
Ich möchte so etwas wie Uniq in Python sortieren
Machen Sie so etwas wie einen Python-Interpreter mit Visual Studio Code
[Python] So erzwingen Sie, dass eine Methode einer Unterklasse einen bestimmten Prozess ausführt
Ich wollte so etwas wie Elixirs Pipe in Python machen
Machst du so etwas wie eine Rakete?
Führen Sie so etwas wie Redis-Transaktionen in Python aus
Ich möchte die Effizienz mit Python auch in einem experimentellen System verbessern. (3) Ich möchte mit Pandas so etwas wie Excel machen
[Python] Weg zur Schlange (6) Manipuliere Pandas
[Python] So erweitern Sie Variablen in einer Zeichenfolge
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
Zeichnen Sie gewaltsam so etwas wie ein Flussdiagramm mit Python, matplotlib
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
[Python] Ein Memo zum vertikalen Schreiben von CSV mit Pandas
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich möchte am Ende etwas mit Python machen
Es ist mühsam, "Kodierung: utf-8" in Python zu schreiben, also werde ich etwas mit Shellscript machen
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
So importieren Sie Dateien in Python an eine beliebige Stelle
[Python] So geben Sie eine Pandas-Tabelle in eine Excel-Datei aus
Erstellen Sie ein Wörterbuch in Python
[Python] Liste in Pandas konvertieren [Pandas]
Ein Weg zum mittleren Python
Fügen Sie MeCab ein Wörterbuch hinzu
[Road to Intermediate Python] Rufen Sie eine Klasseninstanz wie eine Funktion mit __call__ auf
Was tun, wenn in Python minus Null angezeigt wird?
[Python] So fügen Sie einer Tabelle Zeilen und Spalten hinzu (pandas DataFrame)
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Fühlen wir uns wie ein Materialforscher mit Python [Einführung in Pymatgen]
[Maschinelles Lernen] Ich habe versucht, so etwas wie Bilder weiterzugeben
[Python] Wie man PCA mit Python macht
[Python] Verwendung der Pandas-Serie
So etwas wie JS setTimeout in Python
Benötigen Sie Python re.compile?
Erstellen Sie ein verschachteltes Wörterbuch mit defaultdict
Schwanzrekursion mit Python2 durchführen
[Einführung in Python] Verwenden wir Pandas
Was tun mit PYTHON Release?
Metaklasse (delete) zum Generieren eines Wörterbuchs
Ich möchte ○○ mit Pandas machen
[Einführung in Python] Verwenden wir Pandas
5 Möglichkeiten zum Erstellen eines Python-Chatbots
[Einführung in Python] Verwenden wir Pandas
So etwas wie tail -f in Python
Was tun, wenn in python json .dumps eine Dezimalstelle enthalten ist?
[Einführung in die Udemy Python3 + -Anwendung] 47. Verarbeiten Sie das Wörterbuch mit einer for-Anweisung
Hinweis: [Python3] Konvertiert datetime in eine Zeichenfolge in einem beliebigen Format
[Python / Tkinter] Suche nach Pandas DataFrame → Erstellen Sie ein einfaches Suchformular zur Anzeige
[Python] Lesen der CSV-Datei (Methode read_csv des Pandas-Moduls)
Ich möchte Affenpatches nur teilweise sicher mit Python machen