展平 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)