代码之家  ›  专栏  ›  技术社区  ›  Tom Jackson

如何在Python中解包复杂的嵌套列(字典的字典列表)?[推特广告API]

  •  3
  • Tom Jackson  · 技术社区  · 8 年前

    您好,我对Python/编程相当陌生,在解包数据框架中的嵌套列时遇到了问题。

    所讨论的df如下所示:

    我试图解压缩的列如下所示(JSON格式):

    df['id_data'] = [{u'metrics': {u'app_clicks': [6, 28, 13, 28, 43, 45],
      u'card_engagements': [6, 28, 13, 28, 43, 45],
      u'carousel_swipes': None,
      u'clicks': [18, 33, 32, 48, 70, 95],
      u'engagements': [25, 68, 46, 79, 119, 152],
      u'follows': [0, 4, 1, 1, 1, 5],
      u'impressions': [1697, 5887, 3174, 6383, 10250, 12301],
      u'likes': [3, 4, 6, 9, 12, 15],
      u'poll_card_vote': None,
      u'qualified_impressions': None,
      u'replies': [0, 0, 0, 0, 0, 1],
      u'retweets': [1, 3, 0, 2, 5, 6],
      u'tweets_send': None,
      u'url_clicks': None},
     u'segment': None}]
    

    正如你所看到的,本专栏有很多内容。有一个列表->词典->词典->可能是另一个列表。我希望每个单独的指标(app\u点击、card\u参与、carousel\u刷卡等)都是自己的列。我尝试了以下代码,但没有任何进展。

    df['app_clicks'] = df.apply(lambda row: u['app_clicks'] for y in row['id_data'] if y['metricdata'] = 'list', axis=1)
    

    有没有想过我该如何解决这个问题?

    2 回复  |  直到 7 年前
        1
  •  2
  •   johnchase    8 年前

    您应该能够将字典直接传递给dataframe构造函数:

    foo = pd.DataFrame(df['id_data'][0]['metrics'])
    foo.iloc[:3, :4]
    
        app_clicks  card_engagements    carousel_swipes clicks
    0   6           6                   None            18
    1   28          28                  None            33
    2   13          13                  None            32
    

    希望我能正确理解你的问题,这能满足你的需要

        2
  •  0
  •   Lambda    8 年前

    您可以使用 to_json :

    df1 = pd.DataFrame(json.loads(df["id_data"].to_json(orient="records")))
    df2 = pd.DataFrame(json.loads(df1["metrics"].to_json(orient="records")))