Stackoverflowers你好!
我有一個從Facebook營銷API獲得的資料框架,我想將一個列 "解嵌 "為幾行。
這是我通過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]}]
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] }]
我所尋找的,是一個看起來像下面說明的結果
我需要一個for回圈,因為該解決方案需要對許多100行起作用。
我已將示例資料和所需的輸出添加到此表。https://docs.google.com/spreadsheets/d/1jjbtJlfBNZV_wyyAoPY_scyn_jCNFD04XO1-JsztKAg/edit?usp=sharing
真的希望這里有人能幫助我。
預先謝謝你
uj5u.com熱心網友回復:
使用ast.literal_eval將字串轉換為一個python資料結構(這里是dict的串列),然后進行爆炸并提取'value'鍵:
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_50
106 ad_5 0
107 ad_5 0
108 ad_5 0
109 ad_5 0
[110 行 x 2 列]
注意:最好的方法可能是直接使用Facebook Marketing API的回應,而不是從excel檔案中加載資料。
uj5u.com熱心網友回復:
你要找的是pandas.explode。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html,再加上對你的video_play_curve_actions列進行一些必要的預處理。
import pandas as pd
import argparse
if __name__ == '__main__'/span>:
parser = argparse.ArgumentParser()
parser.add_argument('-filepath')
args = parser.parse_args()
df = pd.read_csv(args.filepath)
df['video_play_curve_actions'] = df['video_play_curve_actions'].apply(lambda x: eval(x)[0]['value']
df_exploded = df.explode('video_play_curve_actions').rename(columns={'video_play_curve_actions': 'value'})
print(df_exploded.head() )
輸出:
ad_name value
0 ad_1 100
0 ad_1 40
0 ad_1 16
0 ad_1 10
0 ad_1 7
注意,我在這里使用了eval來處理video_play_curve_actions中的值,這并不總是被認為是最佳做法。如果輸入包含雙引號"而不是單引號',我們可以使用json.load代替。
uj5u.com熱心網友回復:
一種方法是使用str.split()抓取你的video_play_curve_actions的值,然后explode():
(
df.set_index('ad_name')
.video_play_curve_actions.str.split('[')。 str[-1].str[:-3]
.str.split(',').explode().str.strip() Reset_index()
)
列印:
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_50
106 ad_5 0
107 ad_5 0
108 ad_5 0
109 ad_5 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323842.html
標籤:
