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 (oder eine Liste?) Mit Werten. Der DataFrame sieht folgendermaßen aus:
[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 muss diese Spalte in separate Spalten aufteilen, damit der DataFrame folgendermaßen 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, das ich habe, ist, dass die Listen nicht gleich lang sind. Alle Listen enthalten jedoch nur bis zu den gleichen 3 Werten: a, b und c. Und sie erscheinen immer in derselben Reihenfolge (a erste, b zweite, c dritte).
Der folgende Code wurde verwendet, um zu arbeiten und genau das zurückzugeben, was ich wollte (df2).
[3] df
[4] objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
[5] df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1)
[6] print(df2)
Ich habe diesen Code erst letzte Woche ausgeführt und er hat gut funktioniert. Aber jetzt ist mein Code kaputt und ich bekomme diesen Fehler aus Zeile [4]:
IndexError: out-of-bounds on slice (end)
Ich habe keine Änderungen am Code vorgenommen, erhalte aber jetzt den Fehler. Ich denke, das liegt daran, dass meine Methode nicht robust oder richtig ist.
Anregungen oder Anleitungen zum Aufteilen dieser Listenspalte in separate Spalten sind sehr willkommen!
EDIT: Ich denke, die Methoden .tolist () und .apply funktionieren nicht mit meinem Code, da es sich um eine Unicode-Zeichenfolge handelt, dh:
#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 aus der postgreSQL-Datenbank importiert. Hilfe oder Ideen zu diesem Thema? Gibt es eine Möglichkeit, den Unicode zu konvertieren?
iloc[:, :3]
davon ausgegangen wird, dass es 3 Elemente gibt, und dass neuere Datenscheiben möglicherweise nur 1 oder 2 haben (z. B. gibt es zufällig kein b
Like in index 8813
)?
iloc
Teil