You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas将含字典列表的DataFrame列展开为结构化长表

解答

使用pandas完全可以实现该嵌套结构转长表的需求,全程无需额外依赖,操作步骤如下:

核心思路

  • 先用explode()方法将actions列中存储的列表拆分为独立行,保证每个字典和原id一一对应
  • 再用pd.json_normalize()把每行的字典结构展开为普通列
  • 最后筛选需要保留的id、action_type、value三个字段即可

完整可运行代码

import pandas as pd

# 构造与描述一致的示例数据源
df = pd.DataFrame({
    'id': [1, 2],
    'actions': [
        [
            {"action_type":"link_click","value":"1","1d_click":"1","7d_click":"1"},
            {"action_type":"page_engagement","value":"2","1d_click":"2","7d_click":"2"}
        ],
        [
            {"action_type":"link_click","value":"2","1d_click":"2","7d_click":"2"},
            {"action_type":"page_engagement","value":"2","1d_click":"2","7d_click":"2"}
        ]
    ]
})

# 步骤1:拆分actions列的列表为独立行
df_explode = df.explode(column='actions', ignore_index=True)

# 步骤2:展开字典结构为普通列,与原id列拼接
df_expand = pd.concat(
    [df_explode[['id']], pd.json_normalize(df_explode['actions'])],
    axis=1
)

# 步骤3:筛选目标字段
final_df = df_expand[['id', 'action_type', 'value']]

运行后final_df的输出结构和预期长表完全一致:

id       action_type value
0   1         link_click     1
1   1  page_engagement     2
2   2         link_click     2
3   2  page_engagement     2

注:该方法兼容pandas 1.0及以上所有正式版本,数据量较大时,执行效率远高于逐行apply循环的写法。

内容的提问来源于stack exchange,提问作者Eonsworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:34:47