我有一些数据(如下所示),这是一个包含嵌套词典列表的词典. 我想把整个词典变成一行.一排很宽的一排. 目前我可以得到我想要的结果.它相当长,而且不是很优雅. 我希望更好地编写更简洁的代码,并希望编写更高效的代码.
出于上下文考虑,我是为了一个大学项目而这样做的.我们没有在代码优雅或优化方面得到标记.这更多的是为了我自己的利益.
由于对Python还很陌生,我不太擅长使用某种词典的嵌套词典和嵌套词典列表. 任何帮助都将不胜感激!
Data dictionary
{'attack': [{'stat': 'carries_crossed_gain_line', 'value': '52'},
{'stat': 'carries_metres', 'value': '648'},
{'stat': 'carries_not_made_gain_line', 'value': '64'},
{'stat': 'clean_breaks', 'value': '21'},
{'stat': 'defenders_beaten', 'value': '25'},
{'stat': 'offload', 'value': '16'},
{'stat': 'passes', 'value': '168'},
{'stat': 'runs', 'value': '138'},
{'stat': 'turnovers_conceded', 'value': '16'}],
'defence': [{'stat': 'missed_tackles', 'value': '32'},
{'stat': 'tackles', 'value': '125'},
{'stat': 'turnovers_won', 'value': '6'}],
'discipline': [{'stat': 'penalties_conceded', 'value': '12'},
{'stat': 'red_card_second_yellow', 'value': '0'},
{'stat': 'red_cards', 'value': '0'},
{'stat': 'yellow_cards', 'value': '0'}],
'kicking': [{'stat': 'conversion_goals', 'value': '3'},
{'stat': 'kicks_from_hand', 'value': '10'},
{'stat': 'missed_conversion_goals', 'value': '1'},
{'stat': 'missed_penalty_goals', 'value': '0'},
{'stat': 'penalty_goals', 'value': '2'}],
'breakdown': [{'stat': 'mauls_lost', 'value': '0'},
{'stat': 'mauls_total', 'value': '6'},
{'stat': 'mauls_won', 'value': '6'},
{'stat': 'mauls_won_penalty', 'value': '1'},
{'stat': 'mauls_won_try', 'value': '0'},
{'stat': 'rucks_lost', 'value': '11'},
{'stat': 'rucks_total', 'value': '99'},
{'stat': 'rucks_won', 'value': '88'}],
'lineouts': [{'stat': 'lineout_success', 'value': '0.93'},
{'stat': 'lineout_won_steal', 'value': '1'},
{'stat': 'lineouts_Lost', 'value': '1'},
{'stat': 'lineouts_won', 'value': '14'}],
'scrums': [{'stat': 'scrums_lost', 'value': '0'},
{'stat': 'scrums_success', 'value': '1.00'},
{'stat': 'scrums_won', 'value': '2'}],
'possession': [{'stat': 'possession', 'value': '0.50'},
{'stat': 'pc_possession_first', 'value': '0.50'},
{'stat': 'pc_possession_second', 'value': '0.50'},
{'stat': 'ball_possession_last_10_mins', 'value': '0.61'}]}
Desired outcome a wide row like:
What I've tried 我创建了一个函数,可以用它来调用每个嵌套DF,如下所示:
def trim(df):
x = df.transpose()
x.columns = x.iloc[0]
x = x[1:]
return x
我这样称呼它.将上次"攻击"更改为其他统计数据:
trim(pd.DataFrame(results['home']['team_stats']['attack']))
然后我
- 将帧串成一行.
- 将"主页"前置添加到所有列.
- 对客场球队重复步骤一和二,并在列中添加前置"away"
- 将两个结果连接到一个非常非常宽的行中.
- 将比赛详细信息Meta数据添加到行中,使其非常、非常、非常宽.
- 对每套匹配数据重复此操作.
这很耗时.有没有一种方法可以以更有效或更Python 的方式做到这一点? 我的最终目标是收集主队和客场球队的比赛数据(因此数据框宽度增加一倍),并每场比赛进行一行.
Extra data for reference 结果:我只对"比赛"]、"主场"]和"客场"]词典感兴趣. 在主场和客场词典中,我试图提取的"team_stats"部分. 此数据来自API.我首先将响应转换为json格式. 每场比赛我都会处理一组这样的数据.目标是参加大约250多场比赛.