I have a data from Facebook Insights API and some columns in the data look like this:
"[{'action_type': 'link_click', 'value': '812'}, {'action_type':'page_engagement','value':'823'}, {'action_type': 'post_engagement', 'value': '823'}, {'action_type':'post', 'value': '1'}, {'action_type': 'post_reaction', 'value': '10'}, {'action_type':'landing_page_view', 'value': '143'}]"]
I’m trying to put the data here in a dataframe, but there is a different campaign in each row and I need to add more than one row for a campaign here, so for campaign a, link click: 812 is also post_engag for campaign a. 823 and these need to be in separate columns for that campaign, so the data needs to be separated as follows:
link_click page_engagement post_engagement post post_reaction landing_page_view
812 823 823 1 10 143
I have a method but I get an error:
def function2(df, col_name, filter="action_type",
which_fields=''):
xx = df[xcol].apply(pd.Series).merge(df["index"], right_index=True, left_index=True).melt
xx2 = xx[col_name].apply(pd.Series).merge(xx["index"], right_index=True, left_index=True)
xx2 = xx2.loc[xx2[filter] == which_fields, ["value", "index"]]
xx2.rename(columns={"value": col_name + '_' + which_fields.replace('.','_')},inplace=True)
return xx2
The error I get is:
raise KeyError(key) from err
KeyError: 'action_type'
How can I do that with Python ?
2
Answers
Try:
Prints:
You can use
ast.literal_eval
and theDataFrame
constructor:output:
used input: