我有一个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下载
有人可以建议我如何展平到目标栏的最后吗? 这意味着目标列将转换为多个列,例如期间,分钟,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)
谢谢 压缩
答案 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