我的数据框内有json值,现在我想对其进行迭代,我尝试了几种方法,但都失败了。我试图将数据框值转换为嵌套字典,以便可以轻松地对其进行迭代,但是我也失败了
迭代值后,我想再次保存,以展开形式插入数据框,以便我可以获取所有值
这就是我的字典值
{
('1144986',
'1'): {
'batsmen': [
{
'name': 'NM Coulter-Nile',
'stats': {
'runs': {
'name': 'runs',
'text': 'RUNS',
'value': '34'
},
'ballsFaced': {
'name': 'ballsFaced',
'text': 'BF',
'value': '31'
}
}
},
{
'name': 'AT Carey',
'stats': {
'runs': {
'name': 'runs',
'text': 'RUNS',
'value': '33'
},
'ballsFaced': {
'name': 'ballsFaced',
'text': 'BF',
'value': '71'
}
}
}
],
'bowlers': [
{
'name': 'DW Steyn',
'stats': {
'overs': {
'name': 'overs',
'text': 'O',
'value': '7'
},
'wickets': {
'name': 'wickets',
'text': 'E',
'value': '2'
}
}
},
{
'name': 'AL Phehlukwayo',
'stats': {
'overs': {
'name': 'overs',
'text': 'O',
'value': '6'
},
'wickets': {
'name': 'wickets',
'text': 'E',
'value': '3'
}
}
}
],
'team': {
'teamDisplayName': 'AUSTRALIA',
'innDisplayName': 'INNINGS',
'runs': 152,
'overs': 38.1,
'wickets': 10,
'description': 'all out',
'inningsRunWicket': 152,
'inningStatus': ''
}
},
('1144986',
'2'): {
'batsmen': [
{
'name': 'RR Hendricks',
'stats': {
'runs': {
'name': 'runs',
'text': 'RUNS',
'value': '44'
},
'ballsFaced': {
'name': 'ballsFaced',
'text': 'BF',
'value': '74'
}
}
},
{
'name': 'Q de Kock',
'stats': {
'runs': {
'name': 'runs',
'text': 'RUNS',
'value': '47'
},
'ballsFaced': {
'name': 'ballsFaced',
'text': 'BF',
'value': '40'
}
}
}
],
'bowlers': [
{
'name': 'NM Coulter-Nile',
'stats': {
'overs': {
'name': 'overs',
'text': 'O',
'value': '3'
},
'wickets': {
'name': 'wickets',
'text': 'E',
'value': '1'
}
}
},
{
'name': 'MP Stoinis',
'stats': {
'overs': {
'name': 'overs',
'text': 'O',
'value': '4.2'
},
'wickets': {
'name': 'wickets',
'text': 'E',
'value': '3'
}
}
}
],
'team': {
'teamDisplayName': 'SOUTH AFRICA',
'innDisplayName': 'INNINGS',
'runs': 153,
'overs': 29.2,
'wickets': 4,
'description': 'target reached',
'inningsRunWicket': '153/4',
'inningStatus': ''
}
}
}
如果有人可以提供有关数据框的帮助,他也可以这样做,我还要粘贴图像以供数据框参考。
这就是我的数据框
我只想遍历json值,无论它是来自字典还是来自数据帧
答案 0 :(得分:2)
好的,您的json无效,因为{('1144986','1'): 'whatever'}
不是有效的json,相反,它是一个极其复杂的python字典定义,包含列表和其他字典,幸运的是,熊猫可以处理但我无法以优美的方式处理我害怕。
现在观看魔术(很抱歉,图像,文字表示不提供信息):
js_dict = {('1144986','1'):{'batsmen' ... # this line won't execute, just for completeness
# Get the initial dataframe
df = pd.DataFrame.from_dict(js_dict, orient='index')
现在,让我们照顾球队,板球运动员和投球手。
团队
teams = pd.concat(df['team'].apply(pd.DataFrame.from_dict, orient='index')
.apply(lambda x: x.T)
.to_dict()).reset_index(level=2,drop=True)
# Join back to the initial dataframe
df = df.join(teams).drop('team', axis=1)
蝙蝠侠
batsmen = pd.concat(df['batsmen']
.apply(pd.DataFrame)
.to_dict()).reset_index(level=2,drop=True)
# Join with the initial dataframe renaming some columns in the process
batsmen = batsmen.join(df).drop(['batsmen', 'bowlers'], axis=1)
batsmen = batsmen.rename(columns={'name': 'batsman_name',
'stats': 'batsman_stats'})
统计数据
batsman_stats = pd.concat(batsmen['batsman_stats']
.apply(pd.DataFrame)
.apply(lambda x: x.T).to_dict()).reset_index(level=2, drop=True)
# Join back with some renamings
batsmen = batsman_stats.join(batsmen).drop('batsman_stats', axis=1)
batsmen = batsmen.rename(columns={'name': 'batsman_stats_name',
'text': 'batsman_stats_text',
'value': 'batsman_stats_value'})
保龄球
bowlers = pd.concat(df['bowlers']
.apply(pd.DataFrame)
.to_dict()).reset_index(level=2,drop=True)
# Join with the initial dataframe renaming some columns in the process
bowlers = bowlers.join(df).drop(['batsmen', 'bowlers'], axis=1)
bowlers = bowlers.rename(columns={'name': 'bowler_name',
'stats': 'bowler_stats'})
统计数据
bowler_stats = pd.concat(df['bowler_stats']
.apply(pd.DataFrame)
.apply(lambda x: x.T)
.to_dict()).reset_index(level=2, drop=True)
# Merge back and rename
bowlers = bowler_stats.join(bowlers).drop('bowler_stats', axis=1)
bowlers = bowlers.rename(columns={'name': 'bowler_stats_name',
'text': 'bowler_stats_text',
'value': 'bowler_stats_value'})