從巢狀字典建構Pandas DataFrame
使用巢狀字典時,將資料轉換為pandas DataFrame 可能具有挑戰性一種與所需結構保持一致的方式。特別是,從字典最深層提取資料作為系列可能會很麻煩。
假設您有一個結構如下的字典:
目標是使用字典第三層的資料建立具有分層索引的 DataFrame。
使用a MultiIndex
pandas MultiIndex 是在 DataFrame 中表示分層資料的便利方法。若要從巢狀字典建立 MultiIndex,請將鍵重塑為與多索引值對應的元組。
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')
此方法將建立一個具有分層索引的 DataFrame,其中第一個包含 UserIds 和第二級包含類別。第三層的資料現在被組織成系列,可以使用 UserId 和 Category 作為索引進行存取。
使用串聯的替代方法
建構 DataFrame 的另一種方法是透過連接元件資料幀。
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)
此方法迭代字典,建立一個 DataFrame對於每個 user_id 和類別組合。然後將產生的資料幀垂直連接並使用鍵作為分層索引進行連接。
以上是如何從具有分層索引的嵌套字典有效建立 Pandas DataFrame?的詳細內容。更多資訊請關注PHP中文網其他相關文章!