Ich habe Daten in einer PostgreSQL-Datenbank gespeichert. Ich frage diese Daten mit Python2.7 und verwandle sie in einen Pandas DataFrame. Die letzte Spalte dieses Datenrahmens enthält jedoch ein Verzeichnis (oder eine Liste?) Von Werten. Die Datenrahmen sieht wie folgt aus:Wörterbuch/Liste in einer Pandas-Spalte in separate Spalten aufteilen
[1] df
Station ID Pollutants
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 brauche diese Spalte in separaten Spalten aufgeteilt, so dass die Datenrahmen wie folgt aussieht:
[2] df2
Station ID a b c
8809 46 3 12
8810 36 5 8
8811 NaN 2 7
8812 NaN NaN 11
8813 82 NaN 15
Das Hauptproblem ist, dass ich mit, dass die Listen nicht die gleichen Längen. Alle Listen enthalten jedoch nur die gleichen drei Werte: a, b und c. Und sie erscheinen immer in der gleichen Reihenfolge (eine erste, eine zweite, eine dritte).
Der folgende Code verwendet, um zu arbeiten und genau das zurückzugeben, was ich wollte (df2).
Ich habe diesen Code nur letzte Woche ausgeführt und es funktionierte gut. Aber jetzt ist mein Code gebrochen und ich bekomme diese Fehlermeldung aus der Zeile [4]:
IndexError: out-of-bounds on slice (end)
Ich habe keine Änderungen an den Code aber bin jetzt die Fehler. Ich denke, das liegt daran, dass meine Methode nicht robust oder korrekt ist.
Alle Vorschläge oder Hinweise zum Aufteilen dieser Spalte von Listen in separate Spalten wäre super geschätzt!
EDIT: Ich denke, die .ToList() und .apply Methoden basieren auf meinen Code nicht funktioniert, weil es eine Unicode-String ist, das heißt:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
Die Daten werden in diesem Format von der PostgreSQL-Datenbank importieren . Irgendwelche Hilfe oder Ideen mit diesem Problem? Gibt es eine Möglichkeit, den Unicode zu konvertieren?
ich mit einer etwas anderen Lösung beantwortet, aber sollte Ihr Code tatsächlich funktioniert auch ganz gut. Ich benutze mein Dummy-Beispiel unten, das funktioniert mit Pandas 0.18.1, wenn ich den "iloc" -Teil weglasse – joris
Es ist ein Teil davon, dass das 'iloc [:, 3]' annimmt, dass es 3 Elemente und vielleicht neuere Daten geben wird Slices haben nur 1 oder 2 (zB gibt es kein 'b' wie in' Index 8813')? – dwanderson