首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在熊猫/python-棒球API中解析嵌套字典

如何在熊猫/python-棒球API中解析嵌套字典
EN

Stack Overflow用户
提问于 2022-08-10 19:47:27
回答 2查看 39关注 0票数 0

嗨,我有下面的API响应,它是一个很长的JSON字符串。我试图解析“消除打击总数”,以便我能够将信息拉到一个数据框架中。我使用函数statsapi.boxscore_data(662647)来提取完整的json响应

代码语言:javascript
复制
awayBattingTotals': {'namefield': 'Totals',   'ab': '33',   'r': '2',   'h': '7',   'hr': '1',   'rbi': '2',   'bb': '0',   'k': '8',   'lob': '13',    From the full json response which is displayed below;

完整的json字符串是超长的。下面是一个片段。我试图使用下面的代码来获取信息,但我没有成功

在这里输入图像描述

statsapi.boxscore_data(662647)

summary = statsapi.boxscore(662647)

result = summary[awayBattingfields]["Totals"]

print(result)

下面是响应的片段;

代码语言:javascript
复制
  {'namefield': '9 Lopez, N  SS',
   'ab': '3',
   'r': '0',
   'h': '1',
   'doubles': '0',
   'triples': '0',
   'hr': '0',
   'rbi': '0',
   'sb': '0',
   'bb': '0',
   'k': '0',
   'lob': '2',
   'avg': '.248',
   'ops': '.599',
   'personId': 670032,
   'battingOrder': '900',
   'substitution': False,
   'note': '',
   'name': 'Lopez, N',
   'position': 'SS',
   'obp': '.305',
   'slg': '.294'}],
 'awayBattingTotals': {'namefield': 'Totals',
  'ab': '33',
  'r': '2',
  'h': '7',
  'hr': '1',
  'rbi': '2',
  'bb': '0',
  'k': '8',
  'lob': '13',
  'avg': '',
  'ops': '',
  'obp': '',
  'slg': '',
  'name': 'Totals',
  'position': '',
  'note': '',
  'substitution': False,
  'battingOrder': '',
  'personId': 0},
 'homeBattingTotals': {'namefield': 'Totals',
  'ab': '34',
  'r': '4',
  'h': '9',
  'hr': '2',
  'rbi': '4',
  'bb': '1',
  'k': '7',
  'lob': '13',
  'avg': '',
  'ops': '',
  'obp': '',
  'slg': '',
  'name': 'Totals',
  'position': '',
  'note': '',
  'substitution': False,
  'battingOrder': '',
  'personId': 0},
 'awayBattingNotes': {0: 'a-Struck out for Zavala in the 8th.'},
 'homeBattingNotes': {},
 'awayPitchers': [{'namefield': 'White Sox Pitchers',
   'ip': 'IP',
   'h': 'H',
   'r': 'R',
   'er': 'ER',
   'bb': 'BB',
   'k': 'K',
   'hr': 'HR',
   'era': 'ERA',
   'p': 'P',
   's': 'S',
   'name': 'White Sox Pitchers',
   'personId': 0,
   'note': ''},
  {'namefield': 'Lynn  (L, 2-5)',
   'ip': '6.0',
   'h': '7',
   'r': '4',
   'er': '4',
   'bb': '1',
   'k': '5',
   'hr': '2',
   'p': '90',
   's': '59',
   'era': '5.88',
   'name': 'Lynn',
   'personId': 458681,
   'note': '(L, 2-5)'},
  {'namefield': 'Kelly, J',
   'ip': '1.0',
   'h': '0',
   'r': '0',
   'er': '0',
   'bb': '0',
   'k': '1',
   'hr': '0',
   'p': '10',
   's': '7',
   'era': '5.18',
   'name': 'Kelly, J',
   'personId': 523260,
   'note': ''},
  {'namefield': 'Foster',
   'ip': '1.0',
   'h': '2',
   'r': '0',
   'er': '0',
   'bb': '0',
   'k': '1',
   'hr': '0',
   'p': '13',
   's': '10',
   'era': '4.40',
   'name': 'Foster',
   'personId': 641582,
   'note': ''}],
 'homePitchers': [{'namefield': 'Royals Pitchers',
   'ip': 'IP',
   'h': 'H',
   'r': 'R',
   'er': 'ER',
   'bb': 'BB',
   'k': 'K',
   'hr': 'HR',
   'era': 'ERA',
   'p': 'P',
   's': 'S',
   'name': 'White Sox Pitchers',
   'personId': 0,
   'note': ''},
  {'namefield': 'Singer  (W, 5-4)',
   'ip': '7.1',
   'h': '5',
   'r': '1',
   'er': '1',
   'bb': '0',
   'k': '6',
   'hr': '1',
   'p': '99',
   's': '71',
   'era': '3.49',
   'name': 'Singer',
   'personId': 663903,
   'note': '(W, 5-4)'},
  {'namefield': 'Barlow, S  (H, 5)',
   'ip': '0.2',
   'h': '0',
   'r': '0',
   'er': '0',
   'bb': '0',
   'k': '1',
   'hr': '0',
   'p': '11',
   's': '8',
   'era': '2.19',
   'name': 'Barlow, S',
   'personId': 605130,
   'note': '(H, 5)'},
  {'namefield': 'Coleman  (H, 10)',
   'ip': '0.1',
   'h': '2',
   'r': '1',
   'er': '1',
   'bb': '0',
   'k': '0',
   'hr': '0',
   'p': '13',
   's': '8',
   'era': '2.98',
   'name': 'Coleman',
   'personId': 669395,
   'note': '(H, 10)'},
  {'namefield': 'Cuas  (S, 1)',
   'ip': '0.2',
   'h': '0',
   'r': '0',
   'er': '0',
   'bb': '0',
   'k': '1',
   'hr': '0',
   'p': '9',
   's': '6',
   'era': '3.09',
   'name': 'Cuas',
   'personId': 621016,
   'note': '(S, 1)'}],
 'awayPitchingTotals': {'namefield': 'Totals',
  'ip': '8.0',
  'h': '9',
  'r': '4',
  'er': '4',
  'bb': '1',
  'k': '7',
  'hr': '2',
  'p': '',
  's': '',
  'era': '',
  'name': 'Totals',
  'personId': 0,
  'note': ''},
 'homePitchingTotals': {'namefield': 'Totals',
  'ip': '9.0',
  'h': '7',
  'r': '2',
  'er': '2',
  'bb': '0',
  'k': '8',
  'hr': '1',
  'p': '',
  's': '',
  'era': '',
  'name': 'Totals',
  'personId': 0,
  'note': ''},
 'gameBoxInfo': [{'label': 'HBP',
   'value': 'Harrison, J (by Singer); Garcia, Le (by Coleman).'},
  {'label': 'Pitches-strikes',
   'value': 'Lynn 90-59; Kelly, J 10-7; Foster 13-10; Singer 99-71; Barlow, S 11-8; Coleman 13-8; Cuas 9-6.'},
  {'label': 'Groundouts-flyouts',
   'value': 'Lynn 4-5; Kelly, J 1-1; Foster 0-2; Singer 6-5; Barlow, S 0-0; Coleman 0-0; Cuas 1-0.'},
  {'label': 'Batters faced',
   'value': 'Lynn 27; Kelly, J 3; Foster 5; Singer 28; Barlow, S 2; Coleman 4; Cuas 2.'},
  {'label': 'Inherited runners-scored', 'value': 'Barlow, S 2-0; Cuas 2-0.'},
  {'label': 'Umpires',
   'value': 'HP: Jerry Meals. 1B: Clint Vondrak. 2B: Malachi Moore. 3B: Vic Carapazza. '},
  {'label': 'Weather', 'value': '84 degrees, Partly Cloudy.'},
  {'label': 'Wind', 'value': '4 mph, L To R.'},
  {'label': 'First pitch', 'value': '3:10 PM.'},
  {'label': 'T', 'value': '2:36.'},
  {'label': 'Venue', 'value': 'Kauffman Stadium.'},
  {'label': 'August 9, 2022'}]}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-11 11:42:49

作为你的输出,你想得到什么?你在这里想做什么还不清楚。

代码语言:javascript
复制
import statsapi

summary = statsapi.boxscore_data(662647)
result = summary["awayBattingTotals"]


print(result)
df = pd.DataFrame([result])
print(df)

输出:

代码语言:javascript
复制
 namefield  ab  r  h hr  ... position note substitution battingOrder personId
0    Totals  33  2  7  1  ...                      False                     0

[1 rows x 19 columns]

还是击球手?

代码语言:javascript
复制
result_batters = summary["awayBatters"]

print(result_batters)
df = pd.DataFrame(result_batters)
print(df)

输出:

代码语言:javascript
复制
            namefield  ab  r  h  ... position   obp   slg battingOrder
0   White Sox Batters  AB  R  H  ...            OBP   SLG             
1       1 Pollock  LF   4  0  1  ...       LF  .286  .353          100
2        2 Robert  CF   4  0  1  ...       CF  .334  .453          200
3       3 Jiménez  DH   4  0  1  ...       DH  .318  .455          300
4      4 Abreu, J  1B   4  1  1  ...       1B  .378  .468          400
5        5 Vaughn  RF   4  0  1  ...       RF  .348  .464          500
6       6 Moncada  3B   3  0  0  ...       3B  .258  .311          600
7    7 Garcia, Le  SS   3  0  0  ...       SS  .240  .279          700
8   8 Harrison, J  2B   3  1  1  ...       2B  .312  .385          800
9         9 Zavala  C   2  0  1  ...        C  .309  .395          900
10       a-Sheets  PH   1  0  0  ...       PH  .285  .385          901
11         Grandal  C   1  0  0  ...        C  .288  .242          902

[12 rows x 22 columns]
票数 0
EN

Stack Overflow用户

发布于 2022-08-10 20:30:38

你需要写

代码语言:javascript
复制
summary["awayBattingTotals"]["Totals"]

代码语言:javascript
复制
summary[awayBattingTotals]["Totals"]

在第一个版本中,您要查找的键是第二个版本中的字符串"awayBattingTotals“,您正在寻找存储在变量awayBattingTotals中的键。由于未定义该变量,因此该变量将失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73311939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档