从Json Python中提取多个键值

2024-05-20 13:17:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个项目编写代码,该项目从JSON API提取多个数据片段。我已经编写了代码,它将把它缩小到我想要的部分,并提取给定键的完整列表(siteSlatePlayerId)。然而,我试图让它同时拉“name”

例:100031,勒布朗·詹姆斯

我如何更改此循环(或者如果您推荐另一种方法)以同时提取“siteSlatePlayerId”和“name”?任何帮助都将不胜感激

df = pd.read_json('https://resultsdb-api.rotogrinders.com/api/slates?start=11/03/2019')
df2 = df
df3 = df2[(df2['slateTypeName'] == 'Classic') & (df2['sport'] == 3)]
#df3.to_csv("output3.csv")

Player_Slate = pd.DataFrame.from_dict(df3["slatePlayers"])
print(Player_Slate)

###########################################################
# Get Unique ID for player
###########################################################
def get_playerid(data, key):
   for key in data:
       try:
           if (key == 'siteSlatePlayerId'):
               return (data[key])
       except:
           print('error')
   return 0

for siteSlatePlayerId in Player_Slate.slatePlayers:
   playerid = [get_playerid(x, "siteSlatePlayerId") for x in siteSlatePlayerId]
print(playerid)

这将为我提供所有玩家ID: ['13689965', '13689969', '13689973', '13689977', '13689982', '13689986', '13689989', '13689993', '13689997', '13690002', '13690005', '13690007', '13690011', '13690013', '13690018', '13690022', '13690026', '13690028', '13690030', '13690034', '13690037', '13690041', '13690045', '13690050', '13690054', '13690059', '13690062', '13690066', '13690070', ‘13690074’、‘13690078’、‘13690081’、‘13690084’、‘13690088’、‘13690092’、‘13690096’、


Tags: 项目key代码nameindffordata
1条回答
网友
1楼 · 发布于 2024-05-20 13:17:06

首先,获得一个干净的df:

players_df = pd.json_normalize(df3['slatePlayers'].apply(lambda x: x[0]))

或者players_df = pd.json_normalize(df['slatePlayers'].str[0]),如果您愿意的话pandas.json_normalize将半结构化JSON数据规范化为平面表

然后,您可以得到您想要的:

>>> players_df[['name','siteSlatePlayerId']]
    name    siteSlatePlayerId
0   Kawhi Leonard   13691028
1   Lamar Jackson   13676980
2   Lamar Jackson   13680443
3   Ezekiel Elliott 13679976
4   Ezekiel Elliott 13680092

完整代码:

import pandas as pd
df = pd.read_json('https://resultsdb-api.rotogrinders.com/api/slates?start=11/03/2019')
df2 = df
df3 = df2[(df2['slateTypeName'] == 'Classic') & (df2['sport'] == 3)]
df3.to_csv("output3.csv")
players_df = pd.json_normalize(df['slatePlayers'].apply(lambda x: x[0]))
players_df[['name','siteSlatePlayerId']]

相关问题 更多 >