如何用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_id | ad_name | link_click | post_reaction | comment |
|---|---|---|---|---|
| 123 | Summer Sale | 10 | 5 | 0 |
| 456 | New Product Launch | 15 | 0 | 3 |
| 789 | Brand Awareness | 0 | 0 | 0 |
大数据量场景优化方案
如果你的数据量极大(比如十万条以上),可以用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
相关产品推荐
相关产品推荐

