在python中展平Json文件的问题

时间:2018-10-16 07:05:01

标签: python json pandas parsing

我有一个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')

输出如下:

Pls see here

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

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

,输出如下:

enter image description here

它在各列中包括另一个词典。

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

输入数据文件可以从here下载

有人可以建议我如何展平到目标栏的最后吗? 这意味着目标列将转换为多个列,例如期间,分钟,playerId,TeamId,类型。

要包含 matchId ,我将创建一个新的数据框,如下所示,并与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 :) enter image description here

谢谢 压缩

1 个答案:

答案 0 :(得分:2)

我相信您需要:

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