pandas DataFrame:标准化一个JSON列并与其他列合并

我有一个熊猫DataFrame,其中包含一列,其中包含多个JSON数据项作为字典列表。我想规范化JSON列并复制非JSON列:

# creating dataframe

df_actions = pd.DataFrame(columns=['id', 'actions'])

rows = [[12,json.loads('[{"type": "a","value": "17"},{"type": "b","value": "19"}]')],

[15, json.loads('[{"type": "a","value": "1"},{"type": "b","value": "3"},{"type": "c","value": "5"}]')]]

df_actions.loc[0] = rows[0]

df_actions.loc[1] = rows[1]

>>>df_actions

id actions

0 12 [{'type': 'a', 'value': '17'}, {'type': 'b', '...

1 15 [{'type': 'a', 'value': '1'}, {'type': 'b', 'v...

我想要

>>>df_actions_parsed

id type value

12 a 17

12 b 19

15 a 1

15 b 3

15 c 5

我可以使用以下方式标准化JSON数据:

pd.concat([pd.DataFrame(json_normalize(x)) for x in df_actions['actions']],ignore_index=True)

但我不知道如何将其连接回原始DataFrame的id列。

回答:

您可以将concatwith dict comprehension与with

一起使用,pop用于提取列,删除第二层并join恢复原始:

df1 = (pd.concat({i: pd.DataFrame(x) for i, x in df_actions.pop('actions').items()})

.reset_index(level=1, drop=True)

.join(df_actions)

.reset_index(drop=True))

等同于:

df1 = (pd.concat({i: json_normalize(x) for i, x in df_actions.pop('actions').items()})

.reset_index(level=1, drop=True)

.join(df_actions)

.reset_index(drop=True))


print (df1)

type value id

0 a 17 12

1 b 19 12

2 a 1 15

3 b 3 15

4 c 5 15

以上是 pandas DataFrame:标准化一个JSON列并与其他列合并 的全部内容, 来源链接: utcz.com/qa/419241.html

回到顶部