我将数据保存在postgreSQL数据库中。我使用Python2.7查询这些数据并将其转换为Pandas DataFrame。但是,此数据框的最后一列中包含一个字典(或列表?)的值。数据框看起来是这样的:将Pandas Column中的字典/列表拆分为独立列
[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"}
我需要此列拆分为单独的列,使数据帧是这样的:
[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
我遇到的主要问题是,名单都没有相同的长度。但是,所有列表只包含相同的3个值:a,b和c。它们总是以相同的顺序出现(第一,第二,第三)。
下面的代码用于工作并返回我想要的(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)
我刚刚在上周运行此代码,它工作正常。但现在我的代码被打破,我从线[4]这样的错误:
IndexError: out-of-bounds on slice (end)
我做任何更改代码,但我现在得到的错误。我觉得这是由于我的方法不健全或不适当。
任何有关如何将这一列列表拆分为单独列的建议或指导将受到超级赞赏!
编辑:我认为.tolist()和。适用方法不工作对我的代码,因为它是一个unicode字符串,即:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
的数据从PostgreSQL数据库以这种格式导入。对此问题有何帮助或想法?有没有办法转换unicode?
我有一个稍微不同的解决办法回答,但是,你的代码实际上应该也工作得很好。使用我下面的虚拟示例,如果我省略'iloc'部分 – joris
,则使用pandas 0.18.1。'iloc [:,:3]'假定会有3个项目,可能还有更新的数据切片只有1或2(例如,在'索引8813'中恰好没有'b')? – dwanderson