從巢狀字典項目建構Pandas DataFrames
給定一個嵌套字典,其結構以UserId 作為頂層,Categories 作為第二層level,以及各種屬性作為第三層,目標是建立一個具有分層索引的pandas DataFrame。每個 UserID 應顯示為索引值,而類別和屬性值則會形成列名稱。
從此類字典建構 DataFrame 的傳統嘗試可能會導致索引和列分配不正確。要解決此問題,請考慮以下方法:
1.重塑字典:
一種解決方案是將字典重塑為一種格式,其中鍵是表示所需MultiIndex 的元組。這允許將 pd.DataFrame.from_dict 與 orient='index':
user_dict = { 12: {'Category 1': {'att_1': 1, 'att_2': 'whatever'}, 'Category 2': {'att_1': 23, 'att_2': 'another'}}, 15: {'Category 1': {'att_1': 10, 'att_2': 'foo'}, 'Category 2': {'att_1': 30, 'att_2': 'bar'}} } df = pd.DataFrame.from_dict({(i,j): user_dict[i][j] for i in user_dict.keys() for j in user_dict[i].keys()}, orient='index')
2 一起使用。連接資料幀:
或者,可以透過為每個類別和使用者建立單獨的資料幀,然後連接它們來建立資料幀:
user_ids = [] frames = [] for user_id, d in user_dict.iteritems(): user_ids.append(user_id) frames.append(pd.DataFrame.from_dict(d, orient='index')) df = pd.concat(frames, keys=user_ids)
兩種方法都會產生具有所需資料的資料幀分層索引和列結構:
att_1 att_2 12 Category 1 1 whatever Category 2 23 another 15 Category 1 10 foo Category 2 30 bar
以上是如何從具有分層資料的嵌套字典高效創建 Pandas DataFrame?的詳細內容。更多資訊請關注PHP中文網其他相關文章!