Pandas数据帧转换:从字典k-v对中添加列

时间:2017-01-22 16:49:34

标签: python pandas

我想转换一个如下所示的DataFrame:

         dictionary
0  {'b': 2, 'a': 1}
1  {'c': 4, 'b': 3}

import pandas
df = pandas.DataFrame()
df['dictionary'] = [{'a':1,'b':2},{'b': 3,'c':4}]

到这样的DataFrame上:

         dictionary    a  b    c
0  {'b': 2, 'a': 1}  1.0  2  NaN
1  {'c': 4, 'b': 3}  NaN  3  4.0

其中(当然)列的顺序无关紧要。

如果不显式循环字典或行,我怎么能这样做呢?

2 个答案:

答案 0 :(得分:4)

一种矢量化方法,将给定系列转换为list表示,然后逐列执行连接:

pd.concat([df['dictionary'], pd.DataFrame(df['dictionary'].values.tolist())], axis=1)

enter image description here

答案 1 :(得分:3)

您可以应用pd.Series转换并连接两者:

pd.concat([df, df['dictionary'].apply(pd.Series)], axis=1)
Out: 
         dictionary    a    b    c
0  {'b': 2, 'a': 1}  1.0  2.0  NaN
1  {'b': 3, 'c': 4}  NaN  3.0  4.0

或者您可以使用join

In [4]: df.join(df.dictionary.apply(pd.Series))
Out[4]:
           dictionary    a    b    c
0  {u'a': 1, u'b': 2}  1.0  2.0  NaN
1  {u'c': 4, u'b': 3}  NaN  3.0  4.0