Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python Pandas入門:ネストされた辞書をマルチインデックスDataFrameに変換する方法

PythonのPandasライブラリでは、ネストされた辞書(入れ子構造のdict)を簡単にマルチインデックス付きのDataFrameへ変換できます。本記事では、その具体的な手順をサンプルコードとともにわかりやすく解説します。

全体の流れ

変換の手順は以下の3ステップです。

  1. ネストされた辞書を作成する
  2. 空の辞書を用意し、タプル形式のキーで値を再割り当てする
  3. pd.DataFrame()でマルチインデックスDataFrameに変換する

ステップ1:ネストされた辞書を作成する

まず、外側のキー(スポーツ名)と内側のキー(Boards・Country)を持つネストされた辞書を定義します。

dictNested = {
   'Cricket': {
      'Boards': ['BCCI', 'CA', 'ECB'],
      'Country': ['India', 'Australia', 'England']
   },
   'Football': {
      'Boards': ['TFA', 'TCSA', 'GFA'],
      'Country': ['England', 'Canada', 'Germany']
   }
}

ステップ2:空の辞書を作成して値を再割り当てする

次に、空の辞書を用意します。

new_dict = {}

そして、二重のforループを使い、「外側のキー」と「内側のキー」をタプルとして組み合わせた新しいキーに値を代入していきます。このタプルが、後ほどDataFrameのマルチインデックス(列の階層)になります。

for outerKey, innerDict in dictNested.items():
   for innerKey, values in innerDict.items():
      new_dict[(outerKey, innerKey)] = values

ステップ3:マルチインデックスDataFrameに変換する

最後に、pd.DataFrame()に再構築した辞書を渡すだけで、階層的な列を持つマルチインデックスDataFrameが完成します。

pd.DataFrame(new_dict)

完全なサンプルコード

以下に、ここまでの手順をまとめた実行可能なコード全体を示します。

import pandas as pd

# ネストされた辞書を作成
dictNested = {
   'Cricket': {
      'Boards': ['BCCI', 'CA', 'ECB'],
      'Country': ['India', 'Australia', 'England']
   },
   'Football': {
      'Boards': ['TFA', 'TCSA', 'GFA'],
      'Country': ['England', 'Canada', 'Germany']
   }
}

print("\nNested Dictionary...\n", dictNested)

new_dict = {}
for outerKey, innerDict in dictNested.items():
   for innerKey, values in innerDict.items():
      new_dict[(outerKey, innerKey)] = values

# マルチインデックスDataFrameへ変換
print("\nMulti-index DataFrame...\n", pd.DataFrame(new_dict))

実行結果

上記のコードを実行すると、次のような出力が得られます。

Nested Dictionary...
{'Cricket': {'Country': ['India', 'Australia', 'England'], 'Boards': ['BCCI', 'CA', 'ECB']}, 'Football': {'Country': ['England', 'Canada', 'Germany'], 'Boards': ['TFA', 'TCSA', 'GFA']}}

Multi-index DataFrame...
    Cricket              Football
    Boards    Country    Boards Country
0     BCCI      India       TFA England
1       CA  Australia      TCSA  Canada
2      ECB   England       GFA Germany

ポイントの解説

  • タプルのキーが階層になる:new_dictのキーとして(outerKey, innerKey)というタプルを使用することで、Pandasが自動的にそれをMultiIndexの列として認識します。
  • 上位レベルと下位レベル:出力例では「Cricket」「Football」が上位レベル(レベル0)、「Boards」「Country」が下位レベル(レベル1)のインデックスになっています。
  • 応用:この手法は、JSONデータやAPIレスポンスのような階層構造データを表形式に整形する際にも非常に便利です。

  1. Pythonで辞書をタプルのリストに変換する3つの方法

    Pythonでは、あるコレクション型から別のコレクション型への変換は非常によく行われる操作です。データ処理の要件によっては、辞書に格納されたキーと値のペアを、タプルとしてリストに変換する必要が生じることがあります。この記事では、その実現方法をいくつか紹介します。 items()メソッドとリスト内包表記を使う方法 最もシンプルでPythonらしい方法は、辞書のitems()メソッドをリスト内包表記と組み合わせて使うことです。各キーと値のペアを直接タプル化し、それらをまとめてリストとして生成できます。 サンプルコード Adict = {30:Mon,11:Tue,19:Fri} # 対象とな

  2. スプレッドシートをPythonの辞書に変換する方法をわかりやすく解説

    スプレッドシート(Excelファイル)のデータをPythonの辞書(dict)に変換する最も簡単な方法は、pandasなどの外部ライブラリを利用することです。pandasには、Excelオブジェクトを扱うための便利な機能が数多く用意されており、その中でもto_dict()メソッドを使えば、読み込んだデータを簡単に辞書形式へ変換できます。 基本的な使い方 まず、pandasのExcelFileクラスを使ってExcelファイルを読み込みます。続いて、parse()メソッドでシートの内容をDataFrameとして取得し、最後にto_dict()で辞書に変換します。 サンプルコード from pand