展平 Pandas DataFrame 列
Flatten Pandas DataFrame columns
我最近一直在尝试使用 Facebook 的 Insights API。我觉得我快到了。
当前问题是;我不知道如何正确地展平我的对象。
这是它的外观示例:
[{'impressions': '10491',
'date_start': '2021-01-27',
'clicks': '52',
'spend': '265.760003',
'campaign_name': "campaign_xyz",
'campaign_id': 'campaign_id_123',
'ad_name': 'ad_name_xyz,
'ad_id': 'ad_id_123',
'account_name': 'account_name_xyz',
'account_id': 'account_id_123',
'actions': [{'action_type': 'landing_page_view', 'value': '16'},
{'action_type': 'link_click', 'value': '18'},
{'action_type': 'offsite_conversion.fb_pixel_custom', 'value': '4'},
{'action_type': 'offsite_conversion.fb_pixel_lead', 'value': '3'},
{'action_type': 'offsite_conversion.fb_pixel_purchase', 'value': '9'},
{'action_type': 'post_reaction', 'value': '4'},
{'action_type': 'video_view', 'value': '851'},
{'action_type': 'offsite_conversion.custom.1152415498471708', 'value': '2'},
{'action_type': 'offsite_conversion.custom.209429190307342', 'value': '2'},
{'action_type': 'offsite_conversion.custom.212840703113383', 'value': '3'},
{'action_type': 'offsite_conversion.custom.223430212241510', 'value': '2'},
{'action_type': 'offsite_conversion.custom.255869695824072', 'value': '1'},
{'action_type': 'offsite_conversion.custom.2923329694560824', 'value': '1'},
{'action_type': 'offsite_conversion.custom.305990577082762', 'value': '3'},
{'action_type': 'offsite_conversion.custom.3190323731012244', 'value': '1'},
{'action_type': 'offsite_conversion.custom.334777727694135', 'value': '3'},
{'action_type': 'offsite_conversion.custom.394900471810386', 'value': '2'},
{'action_type': 'offsite_conversion.custom.603817837150091', 'value': '1'},
{'action_type': 'offsite_conversion.custom.611337039483406', 'value': '3'},
{'action_type': 'offsite_conversion.custom.701618050398896', 'value': '2'},
{'action_type': 'offsite_conversion.custom.738774496765904', 'value': '2'},
{'action_type': 'offsite_conversion.custom.758364024710917', 'value': '3'},
{'action_type': 'offsite_conversion.custom.907815113379720', 'value': '1'},
{'action_type': 'post_engagement', 'value': '873'},
{'action_type': 'page_engagement', 'value': '873'},
{'action_type': 'lead', 'value': '3'},
{'action_type': 'omni_purchase', 'value': '9'},
{'action_type': 'purchase', 'value': '9'}],
'date_stop': '2021-01-27',
'country': 'unknown'}]
如您所见,当我从中创建数据帧时,它会发送具有操作的信息,所有 action_types 都在一列中。
像这样:
screenshot
我的目标是让每个动作类型都在自己的列中。
像这样:
screenshot
编辑:
试过这个:
df = pd.DataFrame(l)
for val in df['actions'][0]:
df[val['action_type']] = val['value']
df.drop('actions', axis=1, inplace=True)
首先转换为数据框,然后将 action_type 字典元素转换为列。
但这会导致整个数据帧的所有值都相同:
screenshot
尝试:
df = pd.DataFrame(l)
for val in df['actions'][0]:
df[val['action_type']] = val['value']
df.drop('actions', axis=1, inplace=True)
首先转换为数据框,然后将 action_type 字典元素转换为列。
尝试:
def func(row):
d = {}
for i in row:
d[i['action_type']]=i['value']
return pd.Series(d)
df = pd.DataFrame(l)
df1 = pd.concat([df.drop('actions', axis=1),df['actions'].apply(func)], axis=1)
我最近一直在尝试使用 Facebook 的 Insights API。我觉得我快到了。
当前问题是;我不知道如何正确地展平我的对象。
这是它的外观示例:
[{'impressions': '10491',
'date_start': '2021-01-27',
'clicks': '52',
'spend': '265.760003',
'campaign_name': "campaign_xyz",
'campaign_id': 'campaign_id_123',
'ad_name': 'ad_name_xyz,
'ad_id': 'ad_id_123',
'account_name': 'account_name_xyz',
'account_id': 'account_id_123',
'actions': [{'action_type': 'landing_page_view', 'value': '16'},
{'action_type': 'link_click', 'value': '18'},
{'action_type': 'offsite_conversion.fb_pixel_custom', 'value': '4'},
{'action_type': 'offsite_conversion.fb_pixel_lead', 'value': '3'},
{'action_type': 'offsite_conversion.fb_pixel_purchase', 'value': '9'},
{'action_type': 'post_reaction', 'value': '4'},
{'action_type': 'video_view', 'value': '851'},
{'action_type': 'offsite_conversion.custom.1152415498471708', 'value': '2'},
{'action_type': 'offsite_conversion.custom.209429190307342', 'value': '2'},
{'action_type': 'offsite_conversion.custom.212840703113383', 'value': '3'},
{'action_type': 'offsite_conversion.custom.223430212241510', 'value': '2'},
{'action_type': 'offsite_conversion.custom.255869695824072', 'value': '1'},
{'action_type': 'offsite_conversion.custom.2923329694560824', 'value': '1'},
{'action_type': 'offsite_conversion.custom.305990577082762', 'value': '3'},
{'action_type': 'offsite_conversion.custom.3190323731012244', 'value': '1'},
{'action_type': 'offsite_conversion.custom.334777727694135', 'value': '3'},
{'action_type': 'offsite_conversion.custom.394900471810386', 'value': '2'},
{'action_type': 'offsite_conversion.custom.603817837150091', 'value': '1'},
{'action_type': 'offsite_conversion.custom.611337039483406', 'value': '3'},
{'action_type': 'offsite_conversion.custom.701618050398896', 'value': '2'},
{'action_type': 'offsite_conversion.custom.738774496765904', 'value': '2'},
{'action_type': 'offsite_conversion.custom.758364024710917', 'value': '3'},
{'action_type': 'offsite_conversion.custom.907815113379720', 'value': '1'},
{'action_type': 'post_engagement', 'value': '873'},
{'action_type': 'page_engagement', 'value': '873'},
{'action_type': 'lead', 'value': '3'},
{'action_type': 'omni_purchase', 'value': '9'},
{'action_type': 'purchase', 'value': '9'}],
'date_stop': '2021-01-27',
'country': 'unknown'}]
如您所见,当我从中创建数据帧时,它会发送具有操作的信息,所有 action_types 都在一列中。
像这样: screenshot
我的目标是让每个动作类型都在自己的列中。
像这样: screenshot
编辑: 试过这个:
df = pd.DataFrame(l)
for val in df['actions'][0]:
df[val['action_type']] = val['value']
df.drop('actions', axis=1, inplace=True)
首先转换为数据框,然后将 action_type 字典元素转换为列。
但这会导致整个数据帧的所有值都相同:
screenshot
尝试:
df = pd.DataFrame(l)
for val in df['actions'][0]:
df[val['action_type']] = val['value']
df.drop('actions', axis=1, inplace=True)
首先转换为数据框,然后将 action_type 字典元素转换为列。
尝试:
def func(row):
d = {}
for i in row:
d[i['action_type']]=i['value']
return pd.Series(d)
df = pd.DataFrame(l)
df1 = pd.concat([df.drop('actions', axis=1),df['actions'].apply(func)], axis=1)