如何规范化 Pandas 数据帧中的字典类型列?

How to normalize a Column of Dictionary Type in Pandas dataframe?

提问人:Usman Rafiq 提问时间:6/27/2022 最后编辑:Usman Rafiq 更新时间:6/27/2022 访问量:49

问:

我有一个熊猫,一个包含两列的数据帧。1) 关键字 2) TopicID。

关键字是字典类型。我想规范化此数据帧,使每个主题对每个关键字及其值重复。

我的数据帧Source Dataframe

预期的 Dataframe(对于示例,我只发布了几个关键字)

Expcted

我试过这个代码

df_final = pd.json_normalize(df.keywords.apply(json.loads))

输出 > 打印 (df[['TopicID','keywords']].head(2).to_dict())

{'TopicID': {0: 797, 1: 798}, 'keywords': {0: {'licence': 0.529, 'chapter': 0.462, 'explains': 0.263, 'visitor': 0.244, 'resident': 0.22, 'applying': 0.205, 'privileges': 0.199, 'graduated': 0.188, 'tests': 0.184, 'licensing': 0.18}, 1: {'emotional': 0.352, 'mental': 0.327, 'state': 0.309, 'operate': 0.295, 'drive': 0.242, 'motor': 0.227, 'ability': 0.227, 'next': 0.176, 'illness': 0.176, 'diminish': 0.176}}}
python-3.x pandas 数据帧

评论

0赞 jezrael 6/27/2022
也许是一些与数据相关的问题,是什么?print (df.head(2).to_dict())
0赞 Usman Rafiq 6/27/2022
{'TopicID': {0: 797, 1: 798}, 'keywords': {0: {'licence': 0.529, 'chapter': 0.462, 'explains': 0.263, 'visitor': 0.244, 'resident': 0.22, 'applicationing': 0.205, 'privileges': 0.199, 'graduated': 0.188, 'tests': 0.184, 'licensing': 0.18}, 1: {'emotional': 0.352, 'mindal': 0.327, 'state': 0.309, 'operate': 0.295, 'drive': 0.242, 'motor': 0.227, 'ability': 0.227, 'next': 0.176, 'disease': 0.176}}}

答:

1赞 jezrael 6/27/2022 #1

首先在列表推导中通过扁平字典创建元组列表,然后传递给构造函数:DataFrame

L = [(a, k, v) for a, b in zip(df['TopicID'], df['keywords']) for k, v in b.items()]
df_final = pd.DataFrame(L, columns=['TopicID','Keyword','Value'])
print (df_final)
    TopicID     Keyword  Value
0       797     licence  0.529
1       797     chapter  0.462
2       797    explains  0.263
3       797     visitor  0.244
4       797    resident  0.220
5       797    applying  0.205
6       797  privileges  0.199
7       797   graduated  0.188
8       797       tests  0.184
9       797   licensing  0.180
10      798   emotional  0.352
11      798      mental  0.327
12      798       state  0.309
13      798     operate  0.295
14      798       drive  0.242
15      798       motor  0.227
16      798     ability  0.227
17      798        next  0.176
18      798     illness  0.176
19      798    diminish  0.176