首页 > 解决方案 > 将数据框中的单列转换为行 | 熊猫 Facebook 广告

问题描述

你好Stackoverflowers!

我有一个DataFrame, 获得自Facebook Marketing API, 我想将unnest一列分成几行。

这是我通过 API 获得的数据样本:

ad_name      video_play_curve_actions
ad_1         [{'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]}]
ad_2         [{'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]}]

我正在寻找的结果如下图所示

在此处输入图像描述

为此,我需要一个 for 循环,因为该解决方案需要适用于许多 100 行。

我已在此表中添加了示例数据和所需的输出:https ://docs.google.com/spreadsheets/d/1jjbtJlfBNZV_wyyAoPY_scyn_jCNFD04XO1-JsztKAg/edit?usp=sharing

真的希望这里有人可以帮助我。

提前致谢

编辑:

太感谢了。似乎有多种方法可以修复它,但所有解决方案都包括pandas.explodehttps ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html

肯定会在未来使用它。

星期三快乐

标签: pythonpandasfacebook-ads-apifacebook-marketing-api

解决方案


用于ast.literal_eval将字符串转换为 python 数据结构(此处为 dict 列表),然后分解并提取“值”键:

import ast

out = df[['ad_name']].join(
          df['video_play_curve_actions'].apply(ast.literal_eval).explode()
                                        .apply(lambda x: x['value']).explode()
      ).reset_index(drop=True)

输出:

>>> out
    ad_name video_play_curve_actions
0      ad_1                      100
1      ad_1                       40
2      ad_1                       16
3      ad_1                       10
4      ad_1                        7
..      ...                      ...
105    ad_5                        0
106    ad_5                        0
107    ad_5                        0
108    ad_5                        0
109    ad_5                        0

[110 rows x 2 columns]

注意:最好的方法可能是直接使用来自 Facebook Marketing API 的响应,而不是从 excel 文件中加载数据。


推荐阅读