2016-03-25 7 views
2

Ich habe eine Pandas Datenrahmen mit etwa 500000 Zeilen in folgendem Format:Python Pandas, eine dict Spalte, neue Zeilen für jeden Schlüssel/Wert-Paar

**ID Name Tags** 
4345 Bill {'circle:blue', 'background:orange', 'Type':12} 

Für einfachere Datenanalyse Ich mag würde konvertieren zu:

**ID Name Key   Value** 
4345 Bill Circle  Blue 
4345 Bill Background Orange 
4345 Bill Type  12 

ich habe eine Antwort gefunden, die einen Schlüssel/Wert pro Zeile aufteilen: Python Pandas: How to split a sorted dictionary in a column of a dataframe, aber ich habe kläglich gescheitert dies zu verlängern meine Anforderung oben auszuführen.

Ich könnte das wahrscheinlich mit einigen Standard-Loops schaffen, aber ich hoffe, dass es einen eleganten und effizienten Pandas-Ansatz gibt?

Antwort

2

Basierend auf this answer, können Sie etwas ähnliches tun:

>>> df_tags = df.apply(lambda x: pd.Series(x['Tags']),axis=1).stack().reset_index(level=1, drop=False) 
>>> df_tags.columns = ['Key', 'Value'] 
>>> df_tags 
      Key Value 
0  Type  12 
0 background orange 
0  circle blue 
>>> df.drop('Tags', axis=1).join(df_tags) 
    ID Name   Key Value 
0 4345 Bill  Type  12 
0 4345 Bill background orange 
0 4345 Bill  circle blue 
+0

Die Lösung sehr gut mit einem kleinen Testdatensatz gearbeitet, aber mein Computer ging in Kernschmelze auf einem 0,5 M Reihe Tisch. Ich bin dazu zurückgekehrt, dies in Postgresql zu tun und die Ergebnisse in Pandas zu importieren. – stephen

Verwandte Themen