【问题标题】:Python: Using Pandas to Reformat List of ListsPython:使用 Pandas 重新格式化列表列表
【发布时间】:2016-02-27 09:58:22
【问题描述】:

给定我从 API 中提取的列表。我设法使用熊猫重新格式化了这些数据。但是,我正在尝试获取这些数据的平均值,然后将其逐行打印出来,而不是并排格式。

{
    "resource": "playergamelog",
    "parameters": {
        "PlayerID": 201939,
        "LeagueID": "00",
        "Season": "2014-15",
        "SeasonType": "Regular Season"
    },
    "resultSets": [
        {
            "name": "PlayerGameLog",
            "headers": [
                "SEASON_ID",
                "Player_ID",
                "Game_ID",
                "GAME_DATE",
                "MATCHUP",
                "WL",
                "MIN",
                "FGM",
                "FGA",
                "FG_PCT",
                "FG3M",
                "FG3A",
                "FG3_PCT",
                "FTM",
                "FTA",
                "FT_PCT",
                "OREB",
                "DREB",
                "REB",
                "AST",
                "STL",
                "BLK",
                "TOV",
                "PF",
                "PTS",
                "PLUS_MINUS",
                "VIDEO_AVAILABLE"
            ],
            "rowSet": [
                [
                    "22014",
                    201939,
                    "0021401229",
                    "APR 15, 2015",
                    "GSW vs. DEN",
                    "W",
                    19,
                    4,
                    10,
                    0.4,
                    2,
                    4,
                    0.5,
                    0,
                    0,
                    0,
                    2,
                    2,
                    4,
                    7,
                    5,
                    0,
                    2,
                    1,
                    10,
                    14,
                    1
                ],
                [
                    "22014",
                    201939,
                    "0021401212",
                    "APR 13, 2015",
                    "GSW vs. MEM",
                    "W",
                    29,
                    6,
                    10,
                    0.6,
                    3,
                    6,
                    0.5,
                    0,
                    0,
                    0,
                    0,
                    4,
                    4,
                    8,
                    1,
                    0,
                    3,
                    2,
                    15,
                    24,
                    1
                ],
                [
                    "22014",
                    201939,
                    "0021401192",
                    "APR 11, 2015",
                    "GSW vs. MIN",
                    "W",
                    35,
                    11,
                    21,
                    0.524,
                    5,
                    11,
                    0.455,
                    7,
                    8,
                    0.875,
                    0,
                    4,
                    4,
                    7,
                    4,
                    0,
                    3,
                    1,
                    34,
                    17,
                    1
                ],
                [
                    "22014",
                    201939,
                    "0021401174",
                    "APR 09, 2015",
                    "GSW vs. POR",
                    "W",
                    35,
                    17,
                    23,
                    0.739,
                    8,
                    13,
                    0.615,
                    3,
                    3,
                    1,
                    1,
                    1,
                    2,
                    10,
                    0,
                    0,
                    4,
                    2,
                    45,
                    21,
                    1
                ],
                [
                    "22014",
                    201939,
                    "0021401156",
                    "APR 07, 2015",
                    "GSW @ NOP",
                    "L",
                    35,
                    9,
                    18,
                    0.5,
                    5,
                    8,
                    0.625,
                    2,
                    2,
                    1,
                    1,
                    5,
                    6,
                    9,
                    1,
                    0,
                    2,
                    3,
                    25,
                    4,
                    1
                ],
                [
                    "22014",
                    201939,
                    "0021401150",
                    "APR 05, 2015",
                    "GSW @ SAS",
                    "L",
                    30,
                    9,
                    17,
                    0.529,
                    5,
                    10,
                    0.5,
                    1,
                    2,
                    0.5,
                    0,
                    4,
                    4,
                    6,
                    1,
                    0,
                    4,
                    2,
                    24,
                    -16,
                    1
                ],
                [
                    "22014",
                    201939,
                    "0021401142",
                    "APR 04, 2015",
                    "GSW @ DAL",
                    "W",
                    27,
                    4,
                    12,
                    0.333,
                    1,
                    4,
                    0.25,
                    2,
                    3,
                    0.667,
                    2,
                    2,
                    4,
                    3,
                    1,
                    0,
                    1,
                    1,
                    11,
                    9,
                    1
                ],
                [
                    "22014",
                    201939,
                    "0021401126",
                    "APR 02, 2015",
                    "GSW vs. PHX",
                    "W",
                    34,
                    10,
                    22,
                    0.455,
                    6,
                    11,
                    0.545,
                    2,
                    2,
                    1,
                    1,
                    7,
                    8,
                    5,
                    0,
                    0,
                    6,
                    3,
                    28,
                    -1,
                    1
                ]
            ]
        }
    ]
}

我的代码打印如下:

FG3A                       3.83
FG3_PCT                    0.34
FTM                        5.50
FTA                        7.17
FT_PCT                     0.78
OREB                       0.75

当我收到来自 API 的上述响应时。我指定

data= response_shots.json()['resultSets'][0]['rowSet'] #stats is a list
# Then I assign/store the headers obtained from this API:
headers_traditional = data['resultSets'][0]['headers'] 
# Then I take list of lists from data and reformat it using the following:
traditional_stats = pd.DataFrame(data, columns=headers_traditional)
# If I want to print the traditional stats with mean I use:
print(traditional_stats.mean())

但每当完成此操作或我有多个我正在评估的玩家时,它都会在下面打印下一个玩家的结果。我宁愿让他们并排打印,或者所有一个球员的平均水平在一条线上,然后移动到下一个球员(同时仍然使用相同的标题)

【问题讨论】:

  • 此时我需要修改我拥有的列表列表。代码首先以 pandas 格式打印出第一个感兴趣的玩家。然后打印出它正下方的下一个。
  • 能否请包含您正在使用的 df / API 的标题.. 我正在尝试重新创建
  • 请编辑您的问题以包含您格式化的 DataFrame。

标签: python json api pandas enumerate


【解决方案1】:

哦,等等,我刚刚看了你的评论。做你想做的事情应该很容易:

所有玩家都在同一个DataFrame中的情况

averages = df.groupby('Player_ID').mean().unstack()

每个玩家在单独的 DataFrame 中的情况

这里我假设你让每个玩家一个接一个地循环访问每个 Player_ID。

averages = pd.DataFrame()
for player in all_player_ids:
    # p_data = get data for Player_ID == player from API
    # df = whatever you do to clean p_data
    averages = averages.append(df.groupby('Player_ID').mean().unstack())

我猜你只使用来自p_data['resultSets'] 的数据。试试看,让我知道。

【讨论】:

  • 如果我在 averages = pd.DataFrame() 之后立即打印平均值,我会得到一个空列表。如果我将其更改为averages = pd.DataFrame(data),然后打印平均值,我会得到每场比赛的结果,但没有平均值。然后,如果我在 averages = averages.concat(df.groupby('Player_ID').mean().unstack()) 之后打印平均值,我得到: AttributeError: 'DataFrame' object has no attribute 'concat'
  • averages = pd.DataFrame() 的目的是初始化一个 empty DataFrame,平均值将附加到该数据帧中。所以当你print(averages) 你应该什么都得不到。这就是设计。请不要更改averages = pd.DataFrame(data)。关于AttributeError其实我很想写append,不知道为什么写concat。我已经在答案中解决了这个问题。
  • 和 df 将是我将重新格式化的列表列表?
  • 是的。但是请告诉我,您是为每个玩家创建一个单独的DataFrame,还是所有玩家都在同一个DataFrame 中?如果它们都在同一个DataFrame 中,那么答案会简单得多。我将针对这两种情况进行扩展。
  • 我宁愿将所有玩家都放在同一个 DataFrame 中,因为以后比较它们可能会更容易
猜你喜欢
  • 2022-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多