Teilen / Explodieren Sie eine Spalte von Wörterbüchern in separate Spalten mit Pandas

| | | | | | | | | | | | | | | |

Ich habe Daten in einer postgreSQL-Datenbank gespeichert. Ich frage diese Daten mit Python2.7 ab und verwandle sie in einen Pandas DataFrame. Die letzte Spalte dieses Datenrahmens enthält jedoch ein Wörterbuch mit Werten. Der DataFrame df sieht so aus:

Stations-ID Schadstoffe 8809 {"a": "46", "b": "3", " ;c": "12"} 8810 {"a": "36", "b": "5", "c": "8"} 8811 {"b": " 2", "c": "7"} 8812 {"c": "11"} 8813 {"a": "82", "c": "15"} 

Ich muss diese Spalte in separate Spalten aufteilen, damit der DataFrame `df2 so aussieht:

Stations-ID abc 8809 46 3 12 8810 36 5 8 8811 NaN 2 7 8812 NaN NaN 11 8813 82 NaN 15 

Das Hauptproblem, das ich habe, ist, dass die Listen nicht die gleiche Länge haben. Aber alle Listen enthalten nur up auf die gleichen 3 Werte: "a", "b" und "c". Und sie erscheinen immer in der gleichen Reihenfolge ("a" zuerst, "b" als zweites, "c" als drittes). p>

Der folgende Code wurde verwendet, um zu funktionieren und genau das zurückzugeben, was ich wollte (df2).

objs = [df, pandas.DataFrame(df["Pollutant Levels"].tolist()).iloc[:, :3]] df2 = pandas.concat(objs, axis=1 ).drop("Pollutant Levels", axis=1) print(df2) 

Ich habe diesen Code erst letzte Woche ausgeführt und er hat gut funktioniert. Aber jetzt ist mein Code kaputt und ich erhalte diesen Fehler aus Zeile [4]:

IndexError: out-of-bounds on slice (end) 

Ich habe keine Änderungen am Code vorgenommen, bekomme aber jetzt den Fehler. Ich denke, das liegt daran, dass meine Methode nicht robust oder richtig ist.

Irgendwelche Vorschläge oder Anleitungen, wie man diese Listenspalte in separate Spalten aufteilt, wären sehr dankbar!

BEARBEITEN: Ich denke, die Methoden .tolist() und .apply funktionieren bei meinem Code nicht, da es sich um eine Unicode-Zeichenfolge handelt, dh:

#My data format u{" a": "1", "b": "2", "c": "3"} #und nicht {u"a": "1", u"b": "2", u"c": "3"} 

In diesem Format werden die Daten aus der postgreSQL-Datenbank importiert. Irgendwelche Hilfe oder Ideen zu diesem Problem? Gibt es eine Möglichkeit, den Unicode zu konvertieren?