我有一个熊猫数据框。数据框的列之一是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
列。
答案 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