【问题标题】:Convert dict with list and dict inside to a df将带有列表和字典的字典转换为df
【发布时间】:2021-04-16 17:58:46
【问题描述】:

我有点问题。我有一个看起来像这样的字典:

example_dict = {"AUTHID":[],"visibility":[], "game_owned": {"game_name": [], "game_playtime":[]}}

我正在 Steam 网站上使用 ID 作为 API 中的密钥来获取数据以获取数据。基本上,里面有一些内容,字典应该是这样的:

example_dict = {"AUTHID":[7541,4878,1014],"visibility":["Yes","No","Yes"], "game_owned": {"game_name": [[CounterStrike, TF2], "None", [CounterStrike,Isaac, Bioshock]], "game_playtime":[[45,14],"None",[1,85,10]}}

我现在想要的是把这个字典转换成一个数据框,所以它看起来像这样:

ID Visibility CounterStrike TF2 Isaac Bioshock
7541 yes 45 14 None None
4878 no None None None None
1014 yes 1 None 85 10

但是这个过程太复杂了,我对 dict 和 pandas 不太放心,所以我几乎不知道如何进行。如果有人可以帮助我,将不胜感激,因为我很迷茫。

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    我们可以尝试通过使嵌套列表中的记录出现在 game_namegame_playtime 键中来展平嵌套字典 game_owned,然后从这些记录和 join 中准备一个名为 games 的数据框从键 AUTHIDvisibility 创建的数据框

    g = dct['game_owned']
    games = pd.DataFrame([dict(zip(x, y)) if x != 'None' else {}
                         for x, y in zip(g['game_name'], g['game_playtime'])])
                         
    df = pd.DataFrame({k: dct[k] for k in ('AUTHID', 'visibility')}).join(games)
    

    替代纯基于 pandas 的丑陋方法,我认为它的效率应该低于第一种方法

    pd.json_normalize(dct).apply(pd.Series.explode)\
      .set_index(['AUTHID', 'visibility']).apply(pd.Series.explode)\
      .set_index('game_owned.game_name', append=True)['game_owned.game_playtime']\
                .unstack().drop('None', 1).reset_index().rename_axis(columns=None)
    

    >>> df
    
       AUTHID visibility  CounterStrike   TF2  Isaac  Bioshock
    0    7541        Yes           45.0  14.0    NaN       NaN
    1    4878         No            NaN   NaN    NaN       NaN
    2    1014        Yes            1.0   NaN   85.0      10.0
    

    【讨论】:

    • 效果很好。谢谢你,你真的是救命恩人!
    • @Jauhnax 很高兴为您提供帮助!
    猜你喜欢
    • 2021-12-09
    • 2019-12-31
    • 2022-10-06
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2017-04-23
    相关资源
    最近更新 更多