如何在Python中将嵌套列拆分为几个新列?

2024-04-16 06:21:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,我使用一个数据集来确定用户的反应如何与post reach相关。我的数据集的结构是这样的,其中的“反应”列是嵌套的:

   PostID    Reach    Reaction
   01        787767   {"like":49852,"wow":8017,"haha":3200,"anger":3}
   02        973183   {"like":57911,"wow":3013,"haha":8017,"anger":15}
   03        ...      ...

我想重新构造数据并创建单独的反应列,以便数据帧看起来像这样:

^{pr2}$

Tags: 数据用户post结构likehahawowreach
2条回答

将字典转换为PandasSeries

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

有很多方法可以做到这一点,假设您有一列JSON data。一种简单的方法是apply执行json.loads操作,将字符串转换为dicts,然后使用DataFrame.from_records,或{}来加载它。在

v = pd.DataFrame.from_records(df.Reaction.apply(pd.json.loads))

或者

^{pr2}$

最后,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

相关问题 更多 >