如何在列中拆分dict类型的pandas列?

时间:2018-09-28 04:43:59

标签: python pandas

我有一个熊猫数据框。数据框的列之一是dict对象。以下数据框是真实数据框的一个玩具示例:

 DF = pd.DataFrame({'id':[1,2,3], 'col1':[{'a':1, 'b':2, 'c':3}, {'a':3, 'b':4, 'c':5}, {'a':None, 'b':5, 'c':6}]})

我想将col1分成几列:每个字典键一列。 所有行都具有相同的键。

分割后的数据框应如下所示:

id  a   b    c
1    1  2    3
2   3   4    5
3  None  5   6

注意:我从Postgresql中的dict列中获得了jsonb列。

3 个答案:

答案 0 :(得分:2)

尝试:

df=pd.DataFrame(DF['col1'].tolist())
df['id']=DF['id']

那么现在:

print(df)

IS:

     a  b  c  id
0  1.0  2  3   1
1  3.0  4  5   2
2  NaN  5  6   3

要做:

df=pd.DataFrame(DF['col1'].tolist())
df.insert(0,'id',DF['id'])
print(df)

'id'放在前面

输出:

   id    a  b  c
0   1  1.0  2  3
1   2  3.0  4  5
2   3  NaN  5  6

答案 1 :(得分:2)

输入:

df = pd.DataFrame({'id':[1,2,3], 'col1':[{'a':1, 'b':2, 'c':3}, {'a':3, 'b':4, 'c':5}, {'a':None, 'b':5, 'c':6}]})
df.set_index('id').col1.apply(pd.Series)

输出:

      a    b    c
id
1   1.0  2.0  3.0
2   3.0  4.0  5.0
3   NaN  5.0  6.0

答案 2 :(得分:1)

我认为您需要:

df = pd.concat([DF.drop(['col1'], axis=1), DF['col1'].apply(pd.Series)], axis=1)

输出

    id  a     b     c
0   1   1.0   2.0   3.0
1   2   3.0   4.0   5.0
2   3   NaN   5.0   6.0