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

Pandas如何转换JSON为DataFrame并展开字典列表列

Pandas嵌套JSON列表转宽表实现方案

pandas完全可以实现你描述的转换需求,以下是可直接复用的操作方法:

方法1:通用兼容写法(适合action_type动态变化的场景)

该方法不需要提前预知actions里包含的动作类型,新增动作类型会自动生成对应列。

  • 首先导入依赖,加载原始数据
import pandas as pd
import ast

# 构造示例原始数据,实际使用时替换为你的数据读取逻辑
df = pd.DataFrame({
    'id': ['Obj1', 'Obj2', 'Obj4'],
    'name': ['val1', 'val1', 'val1'],
    'actions': [
        [{'action_type': 'link_click', 'value': '40'}, {'action_type': 'page_engagement', 'value': '546'}],
        [{'action_type': 'link_click', 'value': '10'}, {'action_type': 'page_engagement', 'value': '200'}],
        [{'action_type': 'link_click', 'value': '20'}, {'action_type': 'page_engagement', 'value': '100'}]
    ]
})

# 若actions列存储的是JSON字符串而非原生Python列表/字典,先执行类型转换
# df['actions'] = df['actions'].apply(ast.literal_eval)
  • 执行结构转换
# 1. 炸开actions列的列表,每个字典单独占一行,保留原id、name关联
df_exploded = df.explode('actions', ignore_index=True)
# 2. 把嵌套字典展开为普通列
df_flatten = pd.concat([
    df_exploded[['id', 'name']],
    pd.json_normalize(df_exploded['actions'])
], axis=1)
# 3. 行转列得到最终宽表结构
result = df_flatten.pivot(index=['id', 'name'], columns='action_type', values='value').reset_index()
# 清理透视表残留的索引名
result.columns.name = None

运行后输出的result和你需要的结构完全一致:

id  name link_click page_engagement
0  Obj1  val1         40             546
1  Obj2  val1         10             200
2  Obj4  val1         20             100

方法2:简洁写法(适合已知固定action_type的场景)

如果你的actions里的动作类型固定,可以直接用字典映射快速转换,代码更短:

# 把每行的actions列表转为{action_type:value}的字典,再展开为列
action_df = df['actions'].apply(lambda x: {item['action_type']: item['value'] for item in x}).apply(pd.Series)
# 拼接原有id、name列,删除原actions列
result = pd.concat([df[['id', 'name']], action_df], axis=1)

注意:如果value字段后续需要做数值计算,可以在转换后加一步result[['link_click', 'page_engagement']] = result[['link_click', 'page_engagement']].astype(int)把字符串转成整数类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:36:22