【Pandas】DataFrameのデータを辞書に変換する

Pandas
この記事は約7分で読めます。

こんにちは、JS2IIUです。Pandasのデータフレームの一部を抜き出してdictに変換したい場面で使えるテクニックを紹介します。今回もよろしくお願いします。

はじめに

Pandasは、Pythonでのデータ処理を効率化するための強力なライブラリです。特にDataFrameは、データを表形式で扱える便利なデータ構造ですが、時にはそのデータを辞書形式で扱いたい場面もあります。
この記事では、Pandasのto_dict()メソッドを使用して、DataFrameを辞書形式に変換する方法を解説します。変換後の形式やオプションについて、具体的なコード例を交えて説明します。

DataFrameを辞書に変換する方法

Pandasでは、DataFrameを辞書形式に変換するためにto_dict()メソッドを使用します。このメソッドは、データをさまざまな形式で辞書に変換できる便利な機能を提供します。orientオプションを使うことで、以下のような出力形式を選択できます:

  • デフォルト形式(カラムごと)
    各カラムがキーとなり、キーに対応する値は行インデックスに基づいた辞書になります。
  • 列ごとの形式 (orient='list')
    各カラムがキーとなり、値はそのカラムに対応するリストとして格納されます。
  • 行ごとの形式 (orient='records')
    各行が辞書となり、行ごとにリストで格納されます。

サンプルコードと解説

サンプルコード

以下は、サンプルデータをDataFrameとして作成し、それをさまざまな形式の辞書に変換するコード例です。

import pandas as pd

# サンプルデータを含むDataFrameを作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [24, 30, 18],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)

# DataFrameを辞書形式に変換
dict_default = df.to_dict()  # デフォルト形式
dict_list = df.to_dict(orient='list')  # 列ごとの形式
dict_records = df.to_dict(orient='records')  # 行ごとの形式

# 辞書形式の出力を確認
print("デフォルト形式(カラムごと):")
print(dict_default)

print("\n列ごとの辞書形式:")
print(dict_list)

print("\n行ごとの辞書形式:")
print(dict_records)

実行結果

1. デフォルト形式(カラムごと)

{
    'Name': {0: 'Alice', 1: 'Bob', 2: 'Charlie'},
    'Age': {0: 24, 1: 30, 2: 18},
    'City': {0: 'New York', 1: 'Los Angeles', 2: 'Chicago'}
}
  • 各カラムがキーとなり、その値は行インデックスに基づいた辞書として格納されています。
    例: 'Name': {0: 'Alice', 1: 'Bob', 2: 'Charlie'}

2. 列ごとの形式 (orient='list')

{
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [24, 30, 18],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
  • 各カラムがキーとなり、その値はリストとして格納されています。
    例: 'Name': ['Alice', 'Bob', 'Charlie']

3. 行ごとの形式 (orient='records')

[
    {'Name': 'Alice', 'Age': 24, 'City': 'New York'},
    {'Name': 'Bob', 'Age': 30, 'City': 'Los Angeles'},
    {'Name': 'Charlie', 'Age': 18, 'City': 'Chicago'}
]
  • 各行が辞書となり、それぞれの行がリストとして格納されています。
    例: {'Name': 'Alice', 'Age': 24, 'City': 'New York'}

コードの解説

DataFrameの作成

data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [24, 30, 18],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)

ここでは、辞書型データを基にDataFrameを作成しています。

デフォルト形式

dict_default = df.to_dict()
  • to_dict()メソッドを引数なしで呼び出すと、デフォルトで「カラムごと」の形式に変換されます。

列ごとの形式

dict_list = df.to_dict(orient='list')
  • orient='list'を指定すると、各カラムをリストとして格納します。
  • これは、列単位でデータを処理したい場合に便利です。

行ごとの形式

dict_records = df.to_dict(orient='records')
  • orient='records'を指定すると、各行を辞書形式で格納します。
  • これは、行単位でデータを処理したい場合や、JSON形式のデータを出力したい場合に便利です。

まとめ

Pandasのto_dict()メソッドは、DataFrameをさまざまな形式の辞書に変換する柔軟な方法を提供します。
データの構造や使用目的に応じて、orientオプションを適切に選択することで、効率的なデータ処理が可能になります。

  • デフォルト形式(カラムごと)は、カラム単位でデータを操作する場合に適しています。
  • 列ごとの形式は、リスト形式でデータを保持したい場合に便利です。
  • 行ごとの形式は、JSONのような構造でデータを扱いたい場合に最適です。

参考

少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございます。73

コメント

タイトルとURLをコピーしました