ネストされた辞書項目から Pandas DataFrame を構築する
最上位に UserId、2 番目にカテゴリを特徴とする構造を持つネストされた辞書が与えられているとします。レベル、および 3 番目のレベルとしてのさまざまな属性の目標は、階層インデックスを持つ pandas DataFrame を作成することです。各 UserID はインデックス値として表示される必要があり、カテゴリと属性値は列名を形成します。
このようなディクショナリから DataFrame を構築しようとする従来の試みでは、インデックスと列の割り当てが正しく行われない可能性があります。これに対処するには、次のアプローチを検討してください。
1.辞書の再形成:
1 つの解決策には、キーが目的の MultiIndex を表すタプルである形式に辞書を再形成することが含まれます。これにより、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 を指定した pd.DataFrame.from_dict の使用が許可されます。 DataFrame の連結:
または、カテゴリおよびユーザーごとに個別のデータフレームを構築し、それらを連結することで 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)
どちらのアプローチでも、目的のデータフレームが生成されます。階層インデックスと列構造:
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 中国語 Web サイトの他の関連記事を参照してください。