我已经研究并测试了一整天的方法来做到这一点,虽然我发现了一些有帮助的主题,但到目前为止没有任何东西可以 100% 有效。我在 Python 文档和 Stack Overflow 上找到了有关如何将字典字典转换为数据框的信息,但我正在使用的数据结构与这些示例中的数据结构存在显着差异。让我首先描述我的数据来自哪里以及它是什么样子。
我正在从在线国际象棋网站的公共 API 接收数据。数据位于 JSON 文件中,包含有关站点成员的信息,并按成员的活跃程度(每周、每月和所有时间)进行细分,并包括成员用户名和他加入的日期。以下是该数据结构的示例:
{
"weekly": [
{
"username": "string", //username
"joined": "integer", //timestamp
}
],
"monthly": [
{
"username": "string", //username
"joined": "integer", //timestamp
}
],
"all_time": [
{
"username": "string", //username
"joined": "integer", //timestamp
}
]
}
我的目标是将这些数据放入 Jupyter Notebook 中的 Pandas df 中,以便我可以创建图表来显示成员的活跃程度。
显然,使用 pd.DataFrame.from_dict(data) 会引发错误。我需要解析数据并将其以 Pandas 可以处理的格式写入文件。到目前为止,我的代码正在将用户名和连接数据写入名为 members.conf 的文件中。有两件事我需要解决。1. 我需要包含高级关键数据(Weeks、Months 和 all_time)并将其包含在我的成员文件中。每个 Key 应该只在文件中出现一次,然后是该类别的所有用户数据(即在该时期内活跃的用户)。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 文件后,格式应如下所示:
用户名、加入日期、期间
相关分类