将包含字典的列表字典转换为数据帧

问题描述 投票:0回答:1

我已经研究并测试了一整天这样做的方法,虽然我发现了一些有一定帮助的主题,但到目前为止还没有100%的工作。我在Python文档和Stack Overflow中找到了有关如何将字典字典转换为数据帧的信息,但我正在使用的数据结构与这些示例中的数据结构存在显着差异。首先让我描述一下我的数据来自何处以及它的外观。

我正在从在线国际象棋网站的公共API接收数据。数据位于JSON文件中,包含有关站点成员的信息,并按成员的活动时间(Weekly,Monthly和All_Time)进行细分,并包括成员用户名和他加入的日期。以下是该数据结构的示例:

 {
  "weekly": [
    {
        "username": "string", //username
        "joined": "integer",  //timestamp
    }
  ],
  "monthly": [
    {
        "username": "string", //username
        "joined": "integer",  //timestamp
    }
  ],
  "all_time": [
    {
        "username": "string", //username
        "joined": "integer",  //timestamp
    }
  ]
}

我的目标是将这些数据放入Jupyter笔记本中的Pandas df中,这样我就可以创建显示成员活跃程度的图表。

显然,使用pd.DataFrame.from_dict(data)会引发错误。我需要解析数据并将其写入Pandas可以处理的格式的文件中。到目前为止,我的代码正在编写用户名并将数据加入到名为members的文件中。我需要解决两件事。 1.我需要包含高级关键数据(Weeks,Months和all_time)并将其包含在我的成员文件中。每个密钥只应在文件中显示一次,并且后面跟着该类别的所有用户数据(即,在该时间段内一直处于活动状态的人)。 2.我需要弄清楚如何格式化文件中的数据,以便Pandas可以将它放在df中。目前,用户名和连接数据被写入文件,空格作为分隔符。这是代码。它运行没有错误,所以如果你想,你可以运行它。

import requests 
import json



def getPlayerNames():


    headers = {
        'User-Agent': ' @Knightburgler/1.0 (Python 3.x)',
    'Accept-encoding': 'gzip'
    }


    url = 'https://api.chess.com/pub/club/team-iowa/members'
    response = requests.get(url, headers)

    response.raise_for_status()
    data = response.json()

    fp = open('members.txt', 'w')
    for period in data["weekly"], data["monthly"], data["all_time"]:
        for k in period:
            fp.write(k['username'] + " " + str(k['joined']) + " ")
    fp.close()

def main():
    getPlayerNames()


if __name__ == "__main__":
    main()

# eof

将数据写入CSV文件后,格式应如下所示:

用户名,加入日期,期间

python pandas dictionary dataframe
1个回答
0
投票

您可以使用字典列表创建DataFrame。如下

rows = []
for period in data:
  for k in data[period]:
    rows.append({'username': k['username'], 'joined':k['joined'], 'period': period})

df = pd.DataFrame(rows)

一旦有了DataFrame。保存它就像:

df.to_csv(filename)
© www.soinside.com 2019 - 2024. All rights reserved.