python - 将数据框中的单列转换为行 | 熊猫 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.explode
:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html
肯定会在未来使用它。
星期三快乐
解决方案
用于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 文件中加载数据。
推荐阅读
- python - 在 linux 上导入 PIL 的预编译版本时遇到问题
- macos - 使用 ls 命令时,有没有办法在 Mac OS 中隐藏备份文件(即以“~”结尾的文件)?
- html - 使用 jquery 中的 css() 方法检查样式
- excel - 从一行中删除重复项
- python - 由于其中一个 XML 中有额外的元素标记,Python XML 比较失败
- php - KernelBrowser 将参数添加到正文 POST 请求
- profiling - 用于 Raspbian 的 valgrind(破坏者)
- mysql - 唯一标识符更改时如何更新表?
- android - 在 Android 上创建来电屏幕
- api - https安全下的REST API