簡體   English   中英

將包含字典的列表的字典轉換為數據框

[英]Converting A Dictionary Of Lists That Contain Dictionaries To A Dataframe

我已經研究和測試了整整一天的方法,盡管我發現一些有用的主題,但到目前為止100%都沒有效果。 我已經在Python文檔和Stack Overflow中找到了有關如何將字典詞典轉換為數據框的信息,但是我正在使用的數據結構與這些示例中的數據結構有很大不同。 讓我首先描述我的數據來自何處以及它的外觀。

我正在從在線國際象棋網站的公共API接收數據。 數據位於JSON文件中,包含有關網站成員的信息,並按成員的活躍程度(每周,每月和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 Notebook中的Pandas df中,以便創建可以顯示成員活躍程度的圖表。

顯然,使用pd.DataFrame.from_dict(data)將引發錯誤。 我需要解析數據並將其以Pandas可以處理的格式寫入文件。 到目前為止,我的代碼是將用戶名和聯接的數據寫入一個名為member的文件中。 我需要解決兩件事。 1.我需要包括高級關鍵數據(周,月和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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM