ホームページ > バックエンド開発 > Python チュートリアル > 階層データを含むネストされたディクショナリから Pandas DataFrame を効率的に作成するにはどうすればよいですか?

階層データを含むネストされたディクショナリから Pandas DataFrame を効率的に作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-14 10:58:12
オリジナル
538 人が閲覧しました

How Can I Efficiently Create a Pandas DataFrame from a Nested Dictionary with Hierarchical Data?

ネストされた辞書項目から 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート