Splits / explodeer een kolom met woordenboeken in afzonderlijke kolommen met panda’s

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

Ik heb gegevens opgeslagen in een postgreSQL-database. Ik vraag deze gegevens op met Python2.7 en verander het in een Pandas DataFrame. De laatste kolom van dit dataframe bevat echter een woordenboek met waarden. Het DataFrame df ziet er als volgt uit:

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'} 

Ik moet deze kolom in afzonderlijke kolommen splitsen, zodat het DataFrame `df2 er als volgt uitziet:

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

Het grootste probleem dat ik heb, is dat de lijsten niet even lang zijn. Maar alle lijsten bevatten maximaal aan dezelfde 3 waarden: "a", "b" en "c". En ze verschijnen altijd in dezelfde volgorde ("a" eerst, "b" tweede, "c" derde).

De volgende code GEBRUIKT om te werken en precies terug te geven wat ik wilde (df2).

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

Ik heb deze code vorige week uitgevoerd en het werkte prima. Maar nu is mijn code kapot en krijg ik deze fout van regel [4]:

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

Ik heb geen wijzigingen aangebracht in de code, maar krijg nu de foutmelding. Ik denk dat dit komt doordat mijn methode niet robuust of juist is.

Alle suggesties of richtlijnen voor het splitsen van deze kolom met lijsten in afzonderlijke kolommen worden zeer op prijs gesteld!

EDIT: Ik denk dat de methoden .tolist() en .apply niet werken op mijn code omdat het één Unicode-tekenreeks is, namelijk:

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

De gegevens worden in dit formaat geïmporteerd uit de postgreSQL-database. Om het even welke hulp of ideeën met dit probleem? is er een manier om de Unicode te converteren?