Pandas DataFrame・SeriesをPython辞書に変換!to_dict()を使いこなす 📚


 

Pandasでデータ分析を行った後、その結果をPython標準の**辞書(Dictionary)**形式で扱いたい、あるいはWeb APIへのデータ送信や設定ファイルの生成など、辞書形式が求められる場面は多々あります。PandasのDataFrameSeriesには、このニーズに応える便利なto_dict()メソッドが用意されています。

この記事では、DataFrameSeriesをそれぞれ辞書に変換する基本的な方法から、特にDataFrameで重要となる出力形式の指定(orientオプション)までを詳しく解説します。


 

Pandas Seriesを辞書に変換 (.to_dict()) 🔑

 

Seriesは1次元データ構造なので、辞書への変換は比較的シンプルです。Seriesのインデックスが辞書のキーに、値が辞書の値になります。

Python
 
import pandas as pd

# サンプルSeriesを作成
s = pd.Series([100, 200, 300], index=['Apple', 'Banana', 'Orange'], name='Price')

# Seriesを辞書に変換
s_dict = s.to_dict()
print("--- Seriesを辞書に変換 ---")
print(s_dict)
# 出力例: {'Apple': 100, 'Banana': 200, 'Orange': 300}

 

Pandas DataFrameを辞書に変換 (.to_dict()):orientが鍵 🗝️

 

DataFrameは2次元データ構造なので、辞書への変換方法にはいくつかのパターンがあります。これを制御するのがorientオプションです。

 

基本的な使い方とorientオプション

 

orientオプションは、DataFrameの行と列をどのように辞書のキーと値にマッピングするかを指定します。

  • orient=’dict’ (デフォルト):

    辞書の辞書形式で、列名を外側のキー、インデックスを内側のキーとします。

    Python
     
    import pandas as pd
    
    df = pd.DataFrame({
        'A': [1, 2],
        'B': [3, 4]
    })
    
    print("--- orient='dict' (デフォルト) ---")
    print(df.to_dict(orient='dict'))
    # 出力例: {'A': {0: 1, 1: 2}, 'B': {0: 3, 1: 4}}
    
  • orient=’list’:

    辞書の辞書形式で、列名を外側のキー、値をリストとします(インデックスは失われます)。

    Python
     
    import pandas as pd
    
    df = pd.DataFrame({
        'A': [1, 2],
        'B': [3, 4]
    })
    
    print("\n--- orient='list' ---")
    print(df.to_dict(orient='list'))
    # 出力例: {'A': [1, 2], 'B': [3, 4]}
    
  • orient=’series’:

    辞書の辞書形式で、列名を外側のキー、値をSeriesオブジェクトとします。

    Python
     
    import pandas as pd
    
    df = pd.DataFrame({
        'A': [1, 2],
        'B': [3, 4]
    })
    
    print("\n--- orient='series' ---")
    print(df.to_dict(orient='series'))
    # 出力例: {'A': 0    1\n1    2\nName: A, dtype: int64, 'B': 0    3\n1    4\nName: B, dtype: int64}
    
  • orient=’records’:

    行を辞書として、その辞書のリストとして出力します。Web APIでJSONデータを送信する際によく使われる形式です。

    Python
     
    import pandas as pd
    
    df = pd.DataFrame({
        'ID': [101, 102],
        'Name': ['Alice', 'Bob']
    })
    
    print("\n--- orient='records' (最も一般的) ---")
    print(df.to_dict(orient='records'))
    # 出力例: [{'ID': 101, 'Name': 'Alice'}, {'ID': 102, 'Name': 'Bob'}]
    
  • orient=’index’:

    辞書の辞書形式で、インデックスを外側のキー、列名を内側のキーとします。

    Python
     
    import pandas as pd
    
    df = pd.DataFrame({
        'A': [1, 2],
        'B': [3, 4]
    })
    
    print("\n--- orient='index' ---")
    print(df.to_dict(orient='index'))
    # 出力例: {0: {'A': 1, 'B': 3}, 1: {'A': 2, 'B': 4}}
    
  • orient=’split’:

    index、columns、dataの3つのキーを持つ辞書として出力します。

    Python
     
    import pandas as pd
    
    df = pd.DataFrame({
        'A': [1, 2],
        'B': [3, 4]
    })
    
    print("\n--- orient='split' ---")
    print(df.to_dict(orient='split'))
    # 出力例: {'index': [0, 1], 'columns': ['A', 'B'], 'data': [[1, 3], [2, 4]]}
    

 

よく使うorientの選び方

 

  • 'records': 各行を個別のレコードとして扱いたい場合(Web APIへの送信など)に最も推奨されます

  • 'list': 各列のデータを単純なリストとして取得したい場合。

  • 'dict': デフォルトの挙動で、ネストされた構造を保持したい場合。


 

まとめ

 

Pandasのto_dict()メソッドは、DataFrameSeriesのデータをPythonの辞書形式に柔軟に変換するための強力なツールです。

  • Seriesを辞書に: s.to_dict()

  • DataFrameを辞書に: df.to_dict(orient='...')

特にDataFrameの場合、orientオプションを適切に選択することで、目的の辞書構造を簡単に生成できます。データのエクスポート、API連携、設定ファイルの作成など、様々な場面でこの機能を活用し、データ処理の幅を広げましょう!