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

如何用Pandas将Facebook API返回的嵌套字典列表转为展开DataFrame

解决Facebook API嵌套数据转Pandas DataFrame并展开actions字段的最优方法

先模拟示例数据

假设你从Facebook API拿到的数据结构如下(和实际返回格式一致):

sample_data = [
    {
        "campaign_id": "123",
        "ad_name": "Summer Sale",
        "actions": [
            {"action_type": "link_click", "value": "10"},
            {"action_type": "post_reaction", "value": "5"}
        ]
    },
    {
        "campaign_id": "456",
        "ad_name": "New Product Launch",
        "actions": [
            {"action_type": "link_click", "value": "15"},
            {"action_type": "comment", "value": "3"}
        ]
    },
    {
        "campaign_id": "789",
        "ad_name": "Brand Awareness",
        "actions": []
    }
]

最优实现方法(简洁高效)

直接通过字典转换+列合并的方式处理,代码逻辑清晰,对大多数场景的效率足够:

import pandas as pd

# 1. 生成基础DataFrame
df = pd.DataFrame(sample_data)

# 2. 将每个actions列表转为{action_type: value}的字典,再展开为DataFrame
actions_expanded = df['actions'].apply(lambda x: {item['action_type']: item['value'] for item in x})
actions_expanded = pd.DataFrame(actions_expanded.tolist())

# 3. 合并原数据(移除actions列)和展开后的actions数据,填充缺失值为0并转数值类型
final_df = pd.concat([df.drop('actions', axis=1), actions_expanded], axis=1)
final_df = final_df.fillna(0).astype({col: int for col in actions_expanded.columns})

结果展示

最终final_df的结构如下:

campaign_idad_namelink_clickpost_reactioncomment
123Summer Sale1050
456New Product Launch1503
789Brand Awareness000

大数据量场景优化方案

如果你的数据量极大(比如十万条以上),可以用explode+pivot的方式,效率更高:

import pandas as pd

# 1. 展开actions列表为行
exploded_df = df.explode('actions', ignore_index=True)

# 2. 解析actions字典为单独列,处理空值
exploded_df = pd.concat([exploded_df.drop('actions', axis=1), 
                         exploded_df['actions'].apply(pd.Series).fillna({'action_type': 'none', 'value': 0})], 
                        axis=1)

# 3. 透视成宽表,填充0并转类型
final_df = exploded_df.pivot(index=['campaign_id', 'ad_name'], 
                             columns='action_type', 
                             values='value').reset_index()
final_df = final_df.fillna(0).astype({col: int for col in final_df.columns if col not in ['campaign_id', 'ad_name']})

关键说明

  • Facebook API返回的value字段是字符串类型,必须转成数值类型才能正常计算
  • 两种方法都会自动识别所有出现过的action_type作为列名,没有对应数据的位置自动填0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:25:20