[解決済み] ネストした辞書の項目からpandasのDataFrameを構築する
2022-05-15 16:54:45
質問
user_dict "をネストした構造を持つ辞書があるとします。
- レベル1です。 UserId (長い整数)
- レベル2です。 カテゴリ (文字列)
- レベル3です。 属性の詰め合わせ(float、ints、など)。
例えば、この辞書の項目は次のようになります。
user_dict[12] = {
"Category 1": {"att_1": 1,
"att_2": "whatever"},
"Category 2": {"att_1": 23,
"att_2": "another"}}
の各項目は
user_dict
は同じ構造を持ち
user_dict
には大量のアイテムが含まれており、これをpandasのDataFrameにフィードして、属性から系列を構築したいと思います。この場合、階層的なインデックスは目的のために有用である。
具体的には、私の質問は、シリーズが辞書の"レベル3"の値から構築されるべきであることをDataFrameコンストラクタが理解するのを助ける方法が存在するのでしょうか?
もし私が次のようなことを試すなら。
df = pandas.DataFrame(users_summary)
レベル1"の項目(UserId's)は列として扱われ、これは私が達成したいこと(UserId'sをインデックスとして持つ)とは逆のことです。
私は、辞書エントリを反復した後にシリーズを構築することができることを知っていますが、より直接的な方法がある場合、これは非常に便利です。同様の質問は、ファイルにリストされた json オブジェクトから pandas DataFrame を構築することが可能かどうかを尋ねるものです。
どのように解決するのですか?
pandasのMultiIndexはタプルのリストで構成されています。したがって、最も自然なアプローチは、入力dictを再形成して、そのキーが必要な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'}}}
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')
att_1 att_2
12 Category 1 1 whatever
Category 2 23 another
15 Category 1 10 foo
Category 2 30 bar
別のアプローチとして、コンポーネントデータフレームを連結してデータフレームを構築することもできます。
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'))
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の行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] 一行ずつ追加してPandas Dataframeを作成する
-
[解決済み] Pandasのデータフレームから行を選択するために値のリストを使用する
-
[解決済み] Pandasシリーズ/DataFrame全体をプリティプリントする
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 辞書のリストをpandasのDataFrameに変換する
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] 2つの弦をインターリーブさせる最もピトニックな方法
-
[解決済み] Pythonでzip(*[iter(s)]*n)はどのように動作するのですか?
-
[解決済み] asyncio.ensure_future vs. BaseEventLoop.create_task vs. simple coroutine?
-
[解決済み] python BeautifulSoup テーブルのパース
-
[解決済み] なぜPython 3.5はPython 3.4に比べてstr.translateがずっと速いのですか?
-
[解決済み] ne__は__eq__の否定として実装されるべきか?
-
[解決済み] Pythonを使ってすべてのASCII文字のリストを得るにはどうすればよいですか?
-
[解決済み] リストの各要素に数値を乗じるには?