在Python中,我正在使用数据集来确定用户的反应与帖子范围的关系。我的数据集以这种方式构建,Reactions列是嵌套的:
PostID Reach Reaction
01 787767 {"like":49852,"wow":8017,"haha":3200,"anger":3}
02 973183 {"like":57911,"wow":3013,"haha":8017,"anger":15}
03 ... ...
我想重组数据并创建单独的反应列,以便数据框看起来像这样:
PostID Reach like wow haha anger
01 787767 49852 8017 3200 3
02 973183 57911 3013 8017 15
03 ... ...
答案 0 :(得分:3)
将词典转换为Panda Series
:
pd.concat([df.iloc[:,:2], df.Reaction.apply(pd.Series)],axis=1)
# PostID Reach anger haha like wow
#0 1 787767 3 3200 49852 8017
#1 2 97318 15 8017 57911 3013
答案 1 :(得分:2)
有很多方法可以做到这一点,假设您有一列 JSON数据。一种简单的方法是apply
json.loads
操作,将字符串转换为dicts,然后使用DataFrame.from_records
或json_normalize
将其加载。
v = pd.DataFrame.from_records(df.Reaction.apply(pd.json.loads))
或者,
v = pd.io.json.json_normalize(df.Reaction.apply(pd.json.loads).tolist())
最后,concat
创建结果。
pd.concat([df.drop('Reaction', 1), v], axis=1)
PostID Reach anger haha like wow
0 1 787767 3 3200 49852 8017
1 2 973183 15 8017 57911 3013
另一方面,如果您有一列词典,那么这应该更快 -
v = pd.DataFrame.from_records(df.Reaction)
pd.concat([df.drop('Reaction', 1), v], axis=1)
PostID Reach anger haha like wow
0 1 787767 3 3200 49852 8017
1 2 973183 15 8017 57911 3013