如何将包含多个字典的列表扩展到数据框中?

时间:2021-05-14 11:42:41

标签: python pandas list dictionary

我需要用多个字典扩展列表,但真的找不到方法...

这是 df 的样子:

ColumnA       actions
A             [{'link_click': '1'}, {'post_engagement': '1'}]
B             [{'link_click': '13'}, {'post_engagement': '5'}, {'page_engagement': '7'}]

这就是我想要的输出:

 ColumnA          actions_Link_click       actions_post_engagement      actions_page_engagement
    A                 1                          1                              na
    B                 13                         5                              7

3 个答案:

答案 0 :(得分:2)

首先合并每一行中的字典列表以创建与每一行对应的单个记录,然后从这些生成的记录创建一个新的数据框,现在添加前缀和join新数据框与原始框

records = [{k:v for d in l for k, v in d.items()} for l in df['actions']]
df.join(pd.DataFrame(records, index=df.index).add_prefix('actions_'))

  Column A                                                                     actions actions_link_click actions_post_engagement actions_page_engagement
0        A                             [{'link_click': '1'}, {'post_engagement': '1'}]                  1                       1                     NaN
1        B  [{'link_click': '13'}, {'post_engagement': '5'}, {'page_engagement': '7'}]                 13                       5                       7

答案 1 :(得分:1)

这应该有效:

df = pd.concat([pd.DataFrame(x) for x in df['actions']], keys=df['ColumnA']).reset_index(level = 1, drop = True)
df = df.groupby('ColumnA').first(dropna = True)

如果您想要 actions 前缀,则:

df.columns = ['actions_' + s for s in df.columns]

答案 2 :(得分:0)

另一种可能是:

d = pd.DataFrame.from_records(df["actions"].apply(lambda x: {k: v for d in x for k, v in d.items()}).values)
d["ColumnA"] = df["ColumnA"]

首先,我将每一行的字典列表转换为一个字典。之后,我使用这些值并通过 from_records 创建一个新的 DataFrame,最后我再次将缺少的 ColumnA 添加到 DataFrame 中。