将包含字典的列表字典转换为数据帧
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将包含字典的列表字典转换为数据帧相关的知识,希望对你有一定的参考价值。
我已经研究并测试了一整天这样做的方法,虽然我发现了一些有一定帮助的主题,但到目前为止还没有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文件后,格式应如下所示:
用户名,加入日期,期间
您可以使用字典列表创建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)
以上是关于将包含字典的列表字典转换为数据帧的主要内容,如果未能解决你的问题,请参考以下文章
将标准 python 键值字典列表转换为 pyspark 数据框