【问题标题】:Issue in flattening Json file in python在 python 中展平 Json 文件的问题
【发布时间】:2019-03-20 15:31:48
【问题描述】:

我有一个 json 文件,其中包含比赛分钟的进球记录。 我尝试使用以下代码将其展平:

data_Loc ='Season Fixtures.json'
with open(data_Loc) as data_file:    
    d= json.load(data_file)  
df_Fixtures = pd.io.json.json_normalize(d,'matches')

输出如下:

然后我使用以下方法将目标转换为系列:

df_goal = df_Fixtures.goals.apply(pd.Series)

输出如下:

它在列中包含另一个字典。

如何将目标列直接转换为期间?

输入数据文件可从here下载

谁能告诉我如何展平到目标列的最后一部分? 这意味着目标列将转换为多个列,例如 Period、minutes、playerId、TeamId、Type。

为了包含 ma​​tchId,我创建了一个新的数据框,如下所示,并与 Jez 建议的之前的数据框组合如下:

df_MatchID = pd.io.json.json_normalize(d,'matches')
df_MatchID = df_MatchID[['matchId']]
df_Fixtures_details = pd.concat([df_MatchID,df_Fixtures],axis =1)

输出如下(其他列显示NaN:)

谢谢 泽普

【问题讨论】:

    标签: python json pandas parsing


    【解决方案1】:

    我相信你需要:

    df_Fixtures = pd.io.json.json_normalize(d, ['matches','goals'])
    
    print (df_Fixtures.head())
       minute      period  playerId  teamId  type
    0      14   FirstHalf    206314    3161  goal
    1      72  SecondHalf     20661    3204  goal
    2      78  SecondHalf    206314    3161  goal
    3       3   FirstHalf    300830    3187  goal
    4      72  SecondHalf     21385    3187  goal
    

    编辑:

    data_Loc ='Season Fixtures.json'
    with open(data_Loc) as data_file:    
        d= json.load(data_file)['matches'] 
    
    df = pd.io.json.json_normalize(d, ['goals'],'matchId')
    
    print (df.head())
       minute      period  playerId  teamId  type  matchId
    0      14   FirstHalf    206314    3161  goal  2759508
    1      72  SecondHalf     20661    3204  goal  2759508
    2      78  SecondHalf    206314    3161  goal  2759508
    3       3   FirstHalf    300830    3187  goal  2759507
    4      72  SecondHalf     21385    3187  goal  2759507
    

    【讨论】:

    • 谢谢,杰兹。如果我也想包含 matchId,请创建另一个数据框,如下所示: df_MatchID = df_MatchID[['matchId']] df_Fixtures_details = pd.concat([df_MatchID,df_Fixtures],axis =1) 但是输出显示除了 matchId 列之外的所有 Nan
    • Jez,我已经更新了我的问题,以结合 matchId 和 df_Fixtures
    • @Zephyr - 请给我一些时间,
    • 不用担心。慢慢来。非常感谢您的帮助。
    • @Zephyr - 如果没有 golas,空列表,可以删除 matchId 吗?
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2019-03-21
    • 2022-06-21
    • 2020-03-08
    • 2022-01-16
    • 2017-10-01
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多