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

Pythonでネストした辞書のリストをPandasデータフレームに変換する方法

Pythonでは、CSVやJSONなどさまざまな形式のデータソースからデータを受け取ることが多く、それらはリストや辞書といったPythonオブジェクトへと変換できます。しかし、pandasなどのライブラリを使って計算や分析を行うには、そのデータをデータフレーム(DataFrame)に変換する必要があります。

この記事では、「ネストした辞書」を要素として持つPythonのリストを、pandasのデータフレームへ変換する手順を解説します。

変換の基本的な流れ

まず、ネストした辞書のリストから各行のデータを抽出します。次にforループを使って、あらかじめ空で作成しておいた新しいリストへ行データを追加していきます。最後に、pandasライブラリのDataFrame関数を適用することで、データフレームが完成します。

サンプルコード

import pandas as pd

# ネストした辞書のリスト(元データ)
list = [
    {
        "Fruit": [{"Price": 15.2, "Quality": "A"},
              {"Price": 19, "Quality": "B"},
              {"Price": 17.8, "Quality": "C"},
        ],
        "Name": "Orange"
    },
    {
        "Fruit": [{"Price": 23.2, "Quality": "A"},
              {"Price": 28, "Quality": "B"}
        ],
        "Name": "Grapes"
    }
]

rows = []

# 行データを抽出してフラットなリストに追加
for data in list:
    data_row = data['Fruit']
    n = data['Name']

    for row in data_row:
        row['Name'] = n
        rows.append(row)

# データフレームに変換
df = pd.DataFrame(rows)
print(df)

このコードを実行すると、次のような結果が出力されます。

出力結果

Price Quality   Name
0 15.2     A Orange
1 19.0     B Orange
2 17.8     C Orange
3 23.2     A Grapes
4 28.0     B Grapes

pivot_tableによるデータの再編成

さらに、pivot_table関数を使えば、データを目的の形式に自由に再編成することもできます。ここでは「Name」を行インデックス、「Quality」を列としたクロス集計表を作成してみましょう。

サンプルコード

import pandas as pd

# ネストした辞書のリスト(元データ)
list = [
    {
        "Fruit": [{"Price": 15.2, "Quality": "A"},
              {"Price": 19, "Quality": "B"},
              {"Price": 17.8, "Quality": "C"},
        ],
        "Name": "Orange"
    },
    {
        "Fruit": [{"Price": 23.2, "Quality": "A"},
              {"Price": 28, "Quality": "B"}
        ],
        "Name": "Grapes"
    }
]

rows = []

# 行データを抽出してフラットなリストに追加
for data in list:
    data_row = data['Fruit']
    n = data['Name']

    for row in data_row:
        row['Name'] = n
        rows.append(row)

# データフレームを作成
df = pd.DataFrame(rows)

# pivot_tableで再編成
df = df.pivot_table(index='Name', columns=['Quality'],
                    values=['Price']).reset_index()
print(df)

このコードを実行すると、次のような結果が出力されます。

出力結果

        Name Price          
Quality          A    B    C
0      Grapes 23.2 28.0 NaN
1      Orange 15.2 19.0 17.8

このように、ネストした構造を持つデータでも、行データを一旦フラット化してからDataFramepivot_tableを活用することで、分析しやすい形式へ柔軟に変換できます。APIレスポンスなどで複雑なJSONデータを扱う際にも応用できるテクニックなので、ぜひ覚えておきましょう。

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

    Pythonでは、キーと値のペアを持つタプルのリストを、簡単に辞書(dict)へ変換できます。本記事では、setdefault()メソッドやdict()コンストラクタを使った変換方法を、具体例とともにわかりやすく解説します。 変換のイメージ まずは、どのような変換が行われるのかを見てみましょう。タプルのリストの各要素の第1引数が辞書の「キー」に、第2引数が「値」に対応します。 入力: [(Adwaita, 5), (Aadrika, 5), (Babai, 37), (Mona, 7), (Sanj, 25), (Sakya, 30)] 出力: {Adwaita: 5, Aadr

  2. 【初心者向け】Pythonの辞書(dict)をリストに変換する3つの方法

    Pythonの辞書をリストに変換するには? Pythonの辞書(dict)クラスには、リストへの変換に便利なメソッドが3つ用意されています。それぞれitems()、keys()、values()で、以下のようなビューオブジェクトを返します。 items():キーと値のペア(タプル)で構成されるビューオブジェクト keys():キーのみで構成されるビューオブジェクト values():値のみで構成されるビューオブジェクト これらのビューオブジェクトは、組み込み関数 list() を使うことで、簡単にリストオブジェクトへ変換できます。 実際のコード例 以下は、辞書から各ビューオブジェクトを取