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

如何在Pandas DataFrame中展开嵌套字典列?

如何将DataFrame中字典列表列展开为独立列

针对你提供的DataFrame结构,这里有两种实用方法可以提取actions列中的字典数据,生成以action_type为列名的独立字段:

方法一:直接转换字典列表为宽格式(适合单条/每条记录对应完整字典列表)

这种方法无需拆分行,直接对每行的字典列表做转换,效率更高:

import pandas as pd

# 原数据
df1 = pd.DataFrame({
    'campaign_name': ['Campanha A'],
    'date_start': ['2022-01-01'],
    'date_stop': ['2022-01-31'],
    'reach': [1060],
    'impressions': [2040],
    'clicks': [72],
    'amount_spent': [79.32],
    'cpc': [1.10],
    'ctr': [3.53],
    'actions': [
        [{'action_type': 'post', 'value': '4'}, {'action_type': 'post_engagement', 'value': '3'}, {'action_type': 'post_reaction', 'value': '1'}]
    ]
})

# 1. 处理actions列:将每行的字典列表转为以action_type为列的DataFrame
actions_df = df1['actions'].apply(
    lambda x: pd.DataFrame(x).set_index('action_type')['value']
).apply(pd.Series)

# 2. 将字符串类型的value转为数值类型
actions_df = actions_df.astype(int)

# 3. 合并原数据与处理后的actions列,删除原actions字段
result_df = pd.concat([df1.drop('actions', axis=1), actions_df], axis=1)

print(result_df)

运行后输出的DataFrame就是你需要的格式,其中post、post_engagement、post_reaction会作为独立列存在。

方法二:explode拆分+ pivot转宽(适合多条记录的批量处理)

如果你的DataFrame有多行数据,每行的actions列都包含字典列表,可以用这种通用方法:

# 1. 将actions列的列表拆分为多行
df_exploded = df1.explode('actions')

# 2. 将字典类型的actions字段展开为单独列
df_exploded = pd.concat(
    [df_exploded.drop('actions', axis=1), df_exploded['actions'].apply(pd.Series)],
    axis=1
)

# 3. 将长格式数据转为宽格式,把action_type作为列名
result_df = df_exploded.pivot(
    index=df_exploded.columns.difference(['action_type', 'value']).tolist(),
    columns='action_type',
    values='value'
).reset_index().astype({
    'post': int,
    'post_engagement': int,
    'post_reaction': int
})

关键说明

  • 两种方法的核心都是把字典结构的字段提取为独立列,区别在于是否需要拆分行;
  • 最后通过astype()转换数据类型,确保数值列不是字符串格式;
  • 你之前用explode未得到预期结果,是因为explode仅拆分列表为多行,还需要额外把字典展开为列(即方法二中的第二步)。

内容的提问来源于stack exchange,提问作者Guilherme Henrique Favaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:45:14