首页 > 解决方案 > Python中将列表元素嵌套到数据框

问题描述

公平警告这个问题确实需要一个非标准的 Python 包,nba_api. 我有一个包含 3 个元素的列表,列表中的每个元素都包含另一个包含 2 个元素的列表:一个player数据框和一个team数据框。实现以下预期结果的推荐方法是:1 个组合player数据框和 1 个组合team数据框?来自 R 背景,我将通过以下方式解决这个问题:1. 将players数据框与team数据框连接到joined_listthen,2. 使用do.call(rbind, joined_list)将结果行绑定到一个数据框。我知道这对于许多有经验的 Python 用户来说可能是非常基础的,但是在经过多次搜索之后,我很难找到正确的方法来解决这个问题。

import nba_api
import requests
import pandas as pd

from nba_api.stats.endpoints import boxscoreadvancedv2

# vector of game ids (test purposes)
gameids = ['0021900001','0021900002','0021900012']

headers1 = {
    'Host': 'stats.nba.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'https://stats.nba.com/',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive',
}

# store player and team results for each gameids as elements of list temp
temp = list()
for i in range(len(gameids)):
    temp.append(boxscoreadvancedv2.BoxScoreAdvancedV2(game_id = gameids[i], headers=headers1))

# manually access elements of list and output to data frame
## there has to be an easier way to access list elements and rowbind the results!!!
df_out0 = temp[0].get_data_frames()
df_player0 = df_out0[0]
df_team0 = df_out0[1]

df_out1 = temp[1].get_data_frames()
df_player1 = df_out1[0]
df_team1 = df_out1[1]

标签: pythonpandaslist

解决方案


经过更多的阅读(和清晰),我能够将我的代码的手动部分组合到 for 循环中,生成一个包含球员数据的列表和一个包含团队数据的列表。然后,使用这篇文章:Concatenate a list of pandas dataframes together我能够将playerteam列表组合成各自的数据帧。

## output player frames
i=0
df_out=[]
df_players=[]
for i in range(len(temp)):
    df_out = temp[i].get_data_frames()
    df_players.append(df_out[0])         # index 0 will always contain player frame

df_players = pd.concat(df_players)
print(df_players)

## output team frames
i=0
df_out=[]
df_team=[]
for i in range(len(temp)):
    df_out = temp[i].get_data_frames()
    df_team.append(df_out[1])            # index 1 will always contain team frame

df_team = pd.concat(df_team)
print(df_team)

推荐阅读