使用 pandas 將一列字典拆分/分解為單獨的列

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

我將數據保存在 postgreSQL 數據庫中。我正在使用 Python2.7 查詢這些數據並將其轉換為 Pandas DataFrame。但是,這個數據框的最後一列裡面有一個值字典。 DataFrame 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”} 

我需要將此列拆分為單獨的列,以便 DataFrame `df2 看起來像這樣:

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

我遇到的主要問題是列表的長度不同。但所有列表只包含 up到相同的 3 個值:“a”、“b”和“c”。它們總是以相同的順序出現(“a”在前,“b”第二,“c”第三)。 p>

以下代碼用於工作並準確返回我想要的 (df2)。

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

我上週才運行這段代碼,它運行良好。但是現在我的代碼被破壞了,我從第 [4] 行得到了這個錯誤:

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

我沒有對代碼進行任何更改,但現在出現錯誤。我覺得這是因為我的方法不夠穩健或不合適。

任何關於如何將這一列列表拆分為單獨列的建議或指導將不勝感激!

編輯:我認為 .tolist() 和 .apply 方法不適用於我的代碼,因為它是一個 Unicode 字符串,即:

#My data format u{" a": "1", "b": "2", "c": "3"} #而不是 {u"a": "1", u"b": "2", u"c": "3"} 

數據是以這種格式從postgreSQL數據庫導入的。關於這個問題的任何幫助或想法?有沒有辦法轉換 Unicode?