Pandas处理Facebook Ads数据:如何将DataFrame单列拆分为多行?
不需要使用for循环,用Pandas原生的explode和JSON解析方法就可以高效完成需求,性能远优于循环实现,适配数百行甚至更大规模的数据集都没有问题。
完整实现代码
import pandas as pd # 此处替换为你从API获取的原始DataFrame即可 # 下面是模拟的样例数据 df = pd.DataFrame({ 'ad_name': ['ad_1', 'ad_2'], 'video_play_curve_actions': [ [{'action_type': 'video_view', 'value': [100, 40, 16, 10, 7, 5, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}], [{'action_type': 'video_view', 'value': [100, 51, 22, 13, 9, 7, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}] ] }) # 步骤1:炸开外层列表,取出嵌套的字典结构 df = df.explode('video_play_curve_actions', ignore_index=True) # 步骤2:解析字典列,拆分出action_type和value两个独立列 df = pd.concat([ df.drop('video_play_curve_actions', axis=1), pd.json_normalize(df['video_play_curve_actions']) ], axis=1) # 步骤3:炸开value数组,每个数值单独拆分为一行 df = df.explode('value', ignore_index=True) # 可选:如果需要标注当前行对应第几个播放进度节点,新增以下代码 df['progress_point'] = df.groupby('ad_name').cumcount() + 1
效果说明
执行以上代码后,每个广告对应的value数组会按顺序拆分为独立行,最终输出的结构和预期效果完全一致,全程使用Pandas向量化操作,处理效率极高。
内容的提问来源于stack exchange,提问作者Sebastian Bjørnsen
相关产品推荐
相关产品推荐

